This patch implements functionalities of following ioctls: RTC_PLL_GET - Getting PLL correction Read the PLL correction for RTCs that support PLL. The PLL correction is returned in the following structure: struct rtc_pll_info { int pll_ctrl; /* placeholder for fancier control */ int pll_value; /* get/set correction value */ int pll_max; /* max +ve (faster) adjustment value */ int pll_min; /* max -ve (slower) adjustment value */ int pll_posmult; /* factor for +ve correction */ int pll_negmult; /* factor for -ve correction */ long pll_clock; /* base PLL frequency */ }; A pointer to this structure should be passed as the third ioctl's argument. RTC_PLL_SET - Setting PLL correction Sets the PLL correction for RTCs that support PLL. The PLL correction that is set is specified by the rtc_pll_info structure pointed to by the third ioctl's' argument. Implementation notes: All ioctls in this patch have a pointer to a structure rtc_pll_info as their third argument. All elements of this structure are of type 'int', except the last one that is of type 'long'. That is the reason why a separate target structure (target_rtc_pll_info) is defined in linux-user/syscall_defs. The rest of the implementation is straightforward. Reviewed-by: Laurent Vivier <laurent@vivier.eu> Signed-off-by: Filip Bozuta <Filip.Bozuta@rt-rk.com> Message-Id: <1579117007-7565-6-git-send-email-Filip.Bozuta@rt-rk.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
368 lines
11 KiB
C
368 lines
11 KiB
C
STRUCT_SPECIAL(termios)
|
|
|
|
STRUCT(winsize,
|
|
TYPE_SHORT, TYPE_SHORT, TYPE_SHORT, TYPE_SHORT)
|
|
|
|
STRUCT(serial_multiport_struct,
|
|
TYPE_INT, TYPE_INT, TYPE_CHAR, TYPE_CHAR, TYPE_INT, TYPE_CHAR, TYPE_CHAR,
|
|
TYPE_INT, TYPE_CHAR, TYPE_CHAR, TYPE_INT, TYPE_CHAR, TYPE_CHAR, TYPE_INT,
|
|
MK_ARRAY(TYPE_INT, 32))
|
|
|
|
STRUCT(serial_icounter_struct,
|
|
TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT, MK_ARRAY(TYPE_INT, 16))
|
|
|
|
STRUCT(sockaddr,
|
|
TYPE_SHORT, MK_ARRAY(TYPE_CHAR, 14))
|
|
|
|
STRUCT(rtentry,
|
|
TYPE_ULONG, MK_STRUCT(STRUCT_sockaddr), MK_STRUCT(STRUCT_sockaddr), MK_STRUCT(STRUCT_sockaddr),
|
|
TYPE_SHORT, TYPE_SHORT, TYPE_ULONG, TYPE_PTRVOID, TYPE_SHORT, TYPE_PTRVOID,
|
|
TYPE_ULONG, TYPE_ULONG, TYPE_SHORT)
|
|
|
|
STRUCT(ifmap,
|
|
TYPE_ULONG, TYPE_ULONG, TYPE_SHORT, TYPE_CHAR, TYPE_CHAR, TYPE_CHAR,
|
|
/* Spare 3 bytes */
|
|
TYPE_CHAR, TYPE_CHAR, TYPE_CHAR)
|
|
|
|
/* The *_ifreq_list arrays deal with the fact that struct ifreq has unions */
|
|
|
|
STRUCT(sockaddr_ifreq,
|
|
MK_ARRAY(TYPE_CHAR, IFNAMSIZ), MK_STRUCT(STRUCT_sockaddr))
|
|
|
|
STRUCT(short_ifreq,
|
|
MK_ARRAY(TYPE_CHAR, IFNAMSIZ), TYPE_SHORT)
|
|
|
|
STRUCT(int_ifreq,
|
|
MK_ARRAY(TYPE_CHAR, IFNAMSIZ), TYPE_INT)
|
|
|
|
STRUCT(ifmap_ifreq,
|
|
MK_ARRAY(TYPE_CHAR, IFNAMSIZ), MK_STRUCT(STRUCT_ifmap))
|
|
|
|
STRUCT(char_ifreq,
|
|
MK_ARRAY(TYPE_CHAR, IFNAMSIZ),
|
|
MK_ARRAY(TYPE_CHAR, IFNAMSIZ))
|
|
|
|
STRUCT(ptr_ifreq,
|
|
MK_ARRAY(TYPE_CHAR, IFNAMSIZ), TYPE_PTRVOID)
|
|
|
|
STRUCT(ifconf,
|
|
TYPE_INT, TYPE_PTRVOID)
|
|
|
|
STRUCT(arpreq,
|
|
MK_STRUCT(STRUCT_sockaddr), MK_STRUCT(STRUCT_sockaddr), TYPE_INT, MK_STRUCT(STRUCT_sockaddr),
|
|
MK_ARRAY(TYPE_CHAR, 16))
|
|
|
|
STRUCT(arpreq_old,
|
|
MK_STRUCT(STRUCT_sockaddr), MK_STRUCT(STRUCT_sockaddr), TYPE_INT, MK_STRUCT(STRUCT_sockaddr))
|
|
|
|
STRUCT(cdrom_read_audio,
|
|
TYPE_CHAR, TYPE_CHAR, TYPE_CHAR, TYPE_CHAR, TYPE_CHAR, TYPE_INT, TYPE_PTRVOID,
|
|
TYPE_NULL)
|
|
|
|
STRUCT(hd_geometry,
|
|
TYPE_CHAR, TYPE_CHAR, TYPE_SHORT, TYPE_ULONG)
|
|
|
|
STRUCT(dirent,
|
|
TYPE_LONG, TYPE_LONG, TYPE_SHORT, MK_ARRAY(TYPE_CHAR, 256))
|
|
|
|
STRUCT(kbentry,
|
|
TYPE_CHAR, TYPE_CHAR, TYPE_SHORT)
|
|
|
|
STRUCT(kbsentry,
|
|
TYPE_CHAR, MK_ARRAY(TYPE_CHAR, 512))
|
|
|
|
STRUCT(audio_buf_info,
|
|
TYPE_INT, TYPE_INT, TYPE_INT, TYPE_INT)
|
|
|
|
STRUCT(count_info,
|
|
TYPE_INT, TYPE_INT, TYPE_INT)
|
|
|
|
STRUCT(buffmem_desc,
|
|
TYPE_PTRVOID, TYPE_INT)
|
|
|
|
STRUCT(mixer_info,
|
|
MK_ARRAY(TYPE_CHAR, 16), MK_ARRAY(TYPE_CHAR, 32), TYPE_INT, MK_ARRAY(TYPE_INT, 10))
|
|
|
|
/* loop device ioctls */
|
|
STRUCT(loop_info,
|
|
TYPE_INT, /* lo_number */
|
|
TYPE_OLDDEVT, /* lo_device */
|
|
TYPE_ULONG, /* lo_inode */
|
|
TYPE_OLDDEVT, /* lo_rdevice */
|
|
TYPE_INT, /* lo_offset */
|
|
TYPE_INT, /* lo_encrypt_type */
|
|
TYPE_INT, /* lo_encrypt_key_size */
|
|
TYPE_INT, /* lo_flags */
|
|
MK_ARRAY(TYPE_CHAR, 64), /* lo_name */
|
|
MK_ARRAY(TYPE_CHAR, 32), /* lo_encrypt_key */
|
|
MK_ARRAY(TYPE_ULONG, 2), /* lo_init */
|
|
MK_ARRAY(TYPE_CHAR, 4)) /* reserved */
|
|
|
|
STRUCT(loop_info64,
|
|
TYPE_ULONGLONG, /* lo_device */
|
|
TYPE_ULONGLONG, /* lo_inode */
|
|
TYPE_ULONGLONG, /* lo_rdevice */
|
|
TYPE_ULONGLONG, /* lo_offset */
|
|
TYPE_ULONGLONG, /* lo_sizelimit */
|
|
TYPE_INT, /* lo_number */
|
|
TYPE_INT, /* lo_encrypt_type */
|
|
TYPE_INT, /* lo_encrypt_key_size */
|
|
TYPE_INT, /* lo_flags */
|
|
MK_ARRAY(TYPE_CHAR, 64), /* lo_name */
|
|
MK_ARRAY(TYPE_CHAR, 64), /* lo_crypt_name */
|
|
MK_ARRAY(TYPE_CHAR, 32), /* lo_encrypt_key */
|
|
MK_ARRAY(TYPE_ULONGLONG, 2)) /* lo_init */
|
|
|
|
/* mag tape ioctls */
|
|
STRUCT(mtop, TYPE_SHORT, TYPE_INT)
|
|
STRUCT(mtget, TYPE_LONG, TYPE_LONG, TYPE_LONG, TYPE_LONG, TYPE_LONG,
|
|
TYPE_INT, TYPE_INT)
|
|
STRUCT(mtpos, TYPE_LONG)
|
|
|
|
STRUCT(fb_fix_screeninfo,
|
|
MK_ARRAY(TYPE_CHAR, 16), /* id */
|
|
TYPE_ULONG, /* smem_start */
|
|
TYPE_INT, /* smem_len */
|
|
TYPE_INT, /* type */
|
|
TYPE_INT, /* type_aux */
|
|
TYPE_INT, /* visual */
|
|
TYPE_SHORT, /* xpanstep */
|
|
TYPE_SHORT, /* ypanstep */
|
|
TYPE_SHORT, /* ywrapstep */
|
|
TYPE_INT, /* line_length */
|
|
TYPE_ULONG, /* mmio_start */
|
|
TYPE_INT, /* mmio_len */
|
|
TYPE_INT, /* accel */
|
|
MK_ARRAY(TYPE_CHAR, 3)) /* reserved */
|
|
|
|
STRUCT(fb_var_screeninfo,
|
|
TYPE_INT, /* xres */
|
|
TYPE_INT, /* yres */
|
|
TYPE_INT, /* xres_virtual */
|
|
TYPE_INT, /* yres_virtual */
|
|
TYPE_INT, /* xoffset */
|
|
TYPE_INT, /* yoffset */
|
|
TYPE_INT, /* bits_per_pixel */
|
|
TYPE_INT, /* grayscale */
|
|
MK_ARRAY(TYPE_INT, 3), /* red */
|
|
MK_ARRAY(TYPE_INT, 3), /* green */
|
|
MK_ARRAY(TYPE_INT, 3), /* blue */
|
|
MK_ARRAY(TYPE_INT, 3), /* transp */
|
|
TYPE_INT, /* nonstd */
|
|
TYPE_INT, /* activate */
|
|
TYPE_INT, /* height */
|
|
TYPE_INT, /* width */
|
|
TYPE_INT, /* accel_flags */
|
|
TYPE_INT, /* pixclock */
|
|
TYPE_INT, /* left_margin */
|
|
TYPE_INT, /* right_margin */
|
|
TYPE_INT, /* upper_margin */
|
|
TYPE_INT, /* lower_margin */
|
|
TYPE_INT, /* hsync_len */
|
|
TYPE_INT, /* vsync_len */
|
|
TYPE_INT, /* sync */
|
|
TYPE_INT, /* vmode */
|
|
TYPE_INT, /* rotate */
|
|
MK_ARRAY(TYPE_INT, 5)) /* reserved */
|
|
|
|
STRUCT(fb_cmap,
|
|
TYPE_INT, /* start */
|
|
TYPE_INT, /* len */
|
|
TYPE_PTRVOID, /* red */
|
|
TYPE_PTRVOID, /* green */
|
|
TYPE_PTRVOID, /* blue */
|
|
TYPE_PTRVOID) /* transp */
|
|
|
|
STRUCT(fb_con2fbmap,
|
|
TYPE_INT, /* console */
|
|
TYPE_INT) /* framebuffer */
|
|
|
|
|
|
STRUCT(vt_stat,
|
|
TYPE_SHORT, /* v_active */
|
|
TYPE_SHORT, /* v_signal */
|
|
TYPE_SHORT) /* v_state */
|
|
|
|
STRUCT(vt_mode,
|
|
TYPE_CHAR, /* mode */
|
|
TYPE_CHAR, /* waitv */
|
|
TYPE_SHORT, /* relsig */
|
|
TYPE_SHORT, /* acqsig */
|
|
TYPE_SHORT) /* frsig */
|
|
|
|
STRUCT(dm_ioctl,
|
|
MK_ARRAY(TYPE_INT, 3), /* version */
|
|
TYPE_INT, /* data_size */
|
|
TYPE_INT, /* data_start */
|
|
TYPE_INT, /* target_count*/
|
|
TYPE_INT, /* open_count */
|
|
TYPE_INT, /* flags */
|
|
TYPE_INT, /* event_nr */
|
|
TYPE_INT, /* padding */
|
|
TYPE_ULONGLONG, /* dev */
|
|
MK_ARRAY(TYPE_CHAR, 128), /* name */
|
|
MK_ARRAY(TYPE_CHAR, 129), /* uuid */
|
|
MK_ARRAY(TYPE_CHAR, 7)) /* data */
|
|
|
|
STRUCT(dm_target_spec,
|
|
TYPE_ULONGLONG, /* sector_start */
|
|
TYPE_ULONGLONG, /* length */
|
|
TYPE_INT, /* status */
|
|
TYPE_INT, /* next */
|
|
MK_ARRAY(TYPE_CHAR, 16)) /* target_type */
|
|
|
|
STRUCT(dm_target_deps,
|
|
TYPE_INT, /* count */
|
|
TYPE_INT) /* padding */
|
|
|
|
STRUCT(dm_name_list,
|
|
TYPE_ULONGLONG, /* dev */
|
|
TYPE_INT) /* next */
|
|
|
|
STRUCT(dm_target_versions,
|
|
TYPE_INT, /* next */
|
|
MK_ARRAY(TYPE_INT, 3)) /* version*/
|
|
|
|
STRUCT(dm_target_msg,
|
|
TYPE_ULONGLONG) /* sector */
|
|
|
|
STRUCT(file_clone_range,
|
|
TYPE_LONGLONG, /* src_fd */
|
|
TYPE_ULONGLONG, /* src_offset */
|
|
TYPE_ULONGLONG, /* src_length */
|
|
TYPE_ULONGLONG) /* dest_offset */
|
|
|
|
STRUCT(fiemap_extent,
|
|
TYPE_ULONGLONG, /* fe_logical */
|
|
TYPE_ULONGLONG, /* fe_physical */
|
|
TYPE_ULONGLONG, /* fe_length */
|
|
MK_ARRAY(TYPE_ULONGLONG, 2), /* fe_reserved64[2] */
|
|
TYPE_INT, /* fe_flags */
|
|
MK_ARRAY(TYPE_INT, 3)) /* fe_reserved[3] */
|
|
|
|
STRUCT(fiemap,
|
|
TYPE_ULONGLONG, /* fm_start */
|
|
TYPE_ULONGLONG, /* fm_length */
|
|
TYPE_INT, /* fm_flags */
|
|
TYPE_INT, /* fm_mapped_extents */
|
|
TYPE_INT, /* fm_extent_count */
|
|
TYPE_INT) /* fm_reserved */
|
|
|
|
STRUCT(blkpg_partition,
|
|
TYPE_LONGLONG, /* start */
|
|
TYPE_LONGLONG, /* length */
|
|
TYPE_INT, /* pno */
|
|
MK_ARRAY(TYPE_CHAR, BLKPG_DEVNAMELTH), /* devname */
|
|
MK_ARRAY(TYPE_CHAR, BLKPG_VOLNAMELTH)) /* volname */
|
|
|
|
STRUCT(rtc_time,
|
|
TYPE_INT, /* tm_sec */
|
|
TYPE_INT, /* tm_min */
|
|
TYPE_INT, /* tm_hour */
|
|
TYPE_INT, /* tm_mday */
|
|
TYPE_INT, /* tm_mon */
|
|
TYPE_INT, /* tm_year */
|
|
TYPE_INT, /* tm_wday */
|
|
TYPE_INT, /* tm_yday */
|
|
TYPE_INT) /* tm_isdst */
|
|
|
|
STRUCT(rtc_wkalrm,
|
|
TYPE_CHAR, /* enabled */
|
|
TYPE_CHAR, /* pending */
|
|
MK_STRUCT(STRUCT_rtc_time)) /* time */
|
|
|
|
STRUCT(rtc_pll_info,
|
|
TYPE_INT, /* pll_ctrl */
|
|
TYPE_INT, /* pll_value */
|
|
TYPE_INT, /* pll_max */
|
|
TYPE_INT, /* pll_min */
|
|
TYPE_INT, /* pll_posmult */
|
|
TYPE_INT, /* pll_negmult */
|
|
TYPE_LONG) /* pll_clock */
|
|
|
|
STRUCT(blkpg_ioctl_arg,
|
|
TYPE_INT, /* op */
|
|
TYPE_INT, /* flags */
|
|
TYPE_INT, /* datalen */
|
|
TYPE_PTRVOID) /* data */
|
|
|
|
STRUCT(format_descr,
|
|
TYPE_INT, /* device */
|
|
TYPE_INT, /* head */
|
|
TYPE_INT) /* track */
|
|
|
|
STRUCT(floppy_max_errors,
|
|
TYPE_INT, /* abort */
|
|
TYPE_INT, /* read_track */
|
|
TYPE_INT, /* reset */
|
|
TYPE_INT, /* recal */
|
|
TYPE_INT) /* reporting */
|
|
|
|
#if defined(CONFIG_USBFS)
|
|
/* usb device ioctls */
|
|
STRUCT(usbdevfs_ctrltransfer,
|
|
TYPE_CHAR, /* bRequestType */
|
|
TYPE_CHAR, /* bRequest */
|
|
TYPE_SHORT, /* wValue */
|
|
TYPE_SHORT, /* wIndex */
|
|
TYPE_SHORT, /* wLength */
|
|
TYPE_INT, /* timeout */
|
|
TYPE_PTRVOID) /* data */
|
|
|
|
STRUCT(usbdevfs_bulktransfer,
|
|
TYPE_INT, /* ep */
|
|
TYPE_INT, /* len */
|
|
TYPE_INT, /* timeout */
|
|
TYPE_PTRVOID) /* data */
|
|
|
|
STRUCT(usbdevfs_setinterface,
|
|
TYPE_INT, /* interface */
|
|
TYPE_INT) /* altsetting */
|
|
|
|
STRUCT(usbdevfs_disconnectsignal,
|
|
TYPE_INT, /* signr */
|
|
TYPE_PTRVOID) /* context */
|
|
|
|
STRUCT(usbdevfs_getdriver,
|
|
TYPE_INT, /* interface */
|
|
MK_ARRAY(TYPE_CHAR, USBDEVFS_MAXDRIVERNAME + 1)) /* driver */
|
|
|
|
STRUCT(usbdevfs_connectinfo,
|
|
TYPE_INT, /* devnum */
|
|
TYPE_CHAR) /* slow */
|
|
|
|
STRUCT(usbdevfs_iso_packet_desc,
|
|
TYPE_INT, /* length */
|
|
TYPE_INT, /* actual_length */
|
|
TYPE_INT) /* status */
|
|
|
|
STRUCT(usbdevfs_urb,
|
|
TYPE_CHAR, /* type */
|
|
TYPE_CHAR, /* endpoint */
|
|
TYPE_INT, /* status */
|
|
TYPE_INT, /* flags */
|
|
TYPE_PTRVOID, /* buffer */
|
|
TYPE_INT, /* buffer_length */
|
|
TYPE_INT, /* actual_length */
|
|
TYPE_INT, /* start_frame */
|
|
TYPE_INT, /* union number_of_packets stream_id */
|
|
TYPE_INT, /* error_count */
|
|
TYPE_INT, /* signr */
|
|
TYPE_PTRVOID, /* usercontext */
|
|
MK_ARRAY(MK_STRUCT(STRUCT_usbdevfs_iso_packet_desc), 0)) /* desc */
|
|
|
|
STRUCT(usbdevfs_ioctl,
|
|
TYPE_INT, /* ifno */
|
|
TYPE_INT, /* ioctl_code */
|
|
TYPE_PTRVOID) /* data */
|
|
|
|
STRUCT(usbdevfs_hub_portinfo,
|
|
TYPE_CHAR, /* nports */
|
|
MK_ARRAY(TYPE_CHAR, 127)) /* port */
|
|
|
|
STRUCT(usbdevfs_disconnect_claim,
|
|
TYPE_INT, /* interface */
|
|
TYPE_INT, /* flags */
|
|
MK_ARRAY(TYPE_CHAR, USBDEVFS_MAXDRIVERNAME + 1)) /* driver */
|
|
#endif /* CONFIG_USBFS */
|