xemu/linux-user/syscall_types.h
Filip Bozuta a20a7c2640 linux-user: Add thunk argument types for SIOCGSTAMP and SIOCGSTAMPNS
Socket ioctls SIOCGSTAMP and SIOCGSTAMPNS, used for timestamping the socket
connection, are defined in file "ioctls.h" differently from other ioctls.
The reason for this difference is explained in the comments above their definition.
These ioctls didn't have defined thunk argument types before changes from this
patch. They have special handling functions ("do_ioctl_SIOCGSTAMP" and
"do_ioctl_SIOCGSTAMPNS") that take care of setting values for approppriate argument
types (struct timeval and struct timespec) and thus no thunk argument types were
needed for their implementation. But this patch adds those argument type definitions
in file "syscall_types.h" and "ioctls.h" as it is needed for printing arguments
of these ioctls with strace.

Implementation notes:

    There are two variants of these ioctls: SIOCGSTAMP_OLD/SIOCGSTAM_NEW and
    SIOCGSTAMPNS_OLD/SIOCGSTAMPNS_NEW. One is the old existing definition and the
    other is the 2038 safe variant used for 32-bit architectures. Corresponding
    structure definitions STRUCT_timespec/STRUCT__kernel_timespec and
    STRUCT_timeval/STRUCT__kernel_sock_timeval were added for these variants.
    STRUCT_timeval definition was already inside the file as it is used by
    another implemented ioctl. Two cases were added for definitions
    STRUCT_timeval/STRUCT__kernel_sock_timeval to manage the case when the
    "u_sec" field of the timeval structure is of type int.

Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20200619124727.18080-2-filip.bozuta@syrmia.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
2020-06-29 13:10:11 +02:00

467 lines
14 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))
STRUCT(snd_timer_id,
TYPE_INT, /* dev_class */
TYPE_INT, /* dev_sclass */
TYPE_INT, /* card */
TYPE_INT, /* device */
TYPE_INT) /* subdevice */
STRUCT(snd_timer_ginfo,
MK_STRUCT(STRUCT_snd_timer_id), /* tid */
TYPE_INT, /* flags */
TYPE_INT, /* card */
MK_ARRAY(TYPE_CHAR, 64), /* id */
MK_ARRAY(TYPE_CHAR, 80), /* name */
TYPE_ULONG, /* reserved0 */
TYPE_ULONG, /* resolution */
TYPE_ULONG, /* resolution_min */
TYPE_ULONG, /* resolution_max */
TYPE_INT, /* clients */
MK_ARRAY(TYPE_CHAR, 32)) /* reserved */
STRUCT(snd_timer_gparams,
MK_STRUCT(STRUCT_snd_timer_id), /* tid */
TYPE_ULONG, /* period_num */
TYPE_ULONG, /* period_den */
MK_ARRAY(TYPE_CHAR, 32)) /* reserved */
STRUCT(snd_timer_gstatus,
MK_STRUCT(STRUCT_snd_timer_id), /* tid */
TYPE_ULONG, /* resolution */
TYPE_ULONG, /* resolution_num */
TYPE_ULONG, /* resolution_den */
MK_ARRAY(TYPE_CHAR, 32)) /* reserved */
STRUCT(snd_timer_select,
MK_STRUCT(STRUCT_snd_timer_id), /* id */
MK_ARRAY(TYPE_CHAR, 32)) /* reserved */
STRUCT(snd_timer_info,
TYPE_INT, /* flags */
TYPE_INT, /* card */
MK_ARRAY(TYPE_CHAR, 64), /* id */
MK_ARRAY(TYPE_CHAR, 80), /* name */
TYPE_ULONG, /* reserved0 */
TYPE_ULONG, /* resolution */
MK_ARRAY(TYPE_CHAR, 64)) /* reserved */
STRUCT(snd_timer_params,
TYPE_INT, /* flags */
TYPE_INT, /* ticks */
TYPE_INT, /* queue_size */
TYPE_INT, /* reserved0 */
TYPE_INT, /* filter */
MK_ARRAY(TYPE_CHAR, 60)) /* reserved */
#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32)
STRUCT(timeval,
TYPE_LONG, /* tv_sec */
TYPE_INT) /* tv_usec */
STRUCT(_kernel_sock_timeval,
TYPE_LONG, /* tv_sec */
TYPE_INT) /* tv_usec */
#else
STRUCT(timeval,
TYPE_LONG, /* tv_sec */
TYPE_LONG) /* tv_usec */
STRUCT(_kernel_sock_timeval,
TYPE_LONGLONG, /* tv_sec */
TYPE_LONGLONG) /* tv_usec */
#endif
STRUCT(timespec,
TYPE_LONG, /* tv_sec */
TYPE_LONG) /* tv_nsec */
STRUCT(_kernel_timespec,
TYPE_LONGLONG, /* tv_sec */
TYPE_LONGLONG) /* tv_nsec */
STRUCT(snd_timer_status,
MK_STRUCT(STRUCT_timespec), /* tstamp */
TYPE_INT, /* resolution */
TYPE_INT, /* lost */
TYPE_INT, /* overrun */
TYPE_INT, /* queue */
MK_ARRAY(TYPE_CHAR, 64)) /* reserved */
/* 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(drm_version,
TYPE_INT, /* version_major */
TYPE_INT, /* version_minor */
TYPE_INT, /* version_patchlevel */
TYPE_ULONG, /* name_len */
TYPE_PTRVOID, /* name */
TYPE_ULONG, /* date_len */
TYPE_PTRVOID, /* date */
TYPE_ULONG, /* desc_len */
TYPE_PTRVOID) /* desc */
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 */