On 12/17/2015 09:20 AM, Ben Skeggs wrote: > From: Ben Skeggs <[email protected]> > > This commit also modifies the install path of the main libdrm_nouveau > header to be under a nouveau/ subdirectory. Hey Emil, Ilia, Samuel,
You guys have all done various bits of review on the libdrm/mesa series, would I be able to get you guys to have a final look-over to make sure everything has been addressed, and give your R-b's? Thanks, Ben. > > Signed-off-by: Ben Skeggs <[email protected]> > --- > include/drm/nouveau_drm.h | 1 + > nouveau/Makefile.am | 11 +++- > nouveau/libdrm_nouveau.pc.in | 2 +- > nouveau/nvif/cl0080.h | 45 ++++++++++++++ > nouveau/nvif/cl9097.h | 44 ++++++++++++++ > nouveau/nvif/class.h | 141 > +++++++++++++++++++++++++++++++++++++++++++ > nouveau/nvif/if0002.h | 38 ++++++++++++ > nouveau/nvif/if0003.h | 33 ++++++++++ > nouveau/nvif/ioctl.h | 132 ++++++++++++++++++++++++++++++++++++++++ > nouveau/nvif/unpack.h | 28 +++++++++ > 10 files changed, 473 insertions(+), 2 deletions(-) > create mode 100644 nouveau/nvif/cl0080.h > create mode 100644 nouveau/nvif/cl9097.h > create mode 100644 nouveau/nvif/class.h > create mode 100644 nouveau/nvif/if0002.h > create mode 100644 nouveau/nvif/if0003.h > create mode 100644 nouveau/nvif/ioctl.h > create mode 100644 nouveau/nvif/unpack.h > > diff --git a/include/drm/nouveau_drm.h b/include/drm/nouveau_drm.h > index 87aefc5..e418f9f 100644 > --- a/include/drm/nouveau_drm.h > +++ b/include/drm/nouveau_drm.h > @@ -200,6 +200,7 @@ struct drm_nouveau_sarea { > #define DRM_NOUVEAU_GROBJ_ALLOC 0x04 > #define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC 0x05 > #define DRM_NOUVEAU_GPUOBJ_FREE 0x06 > +#define DRM_NOUVEAU_NVIF 0x07 > #define DRM_NOUVEAU_GEM_NEW 0x40 > #define DRM_NOUVEAU_GEM_PUSHBUF 0x41 > #define DRM_NOUVEAU_GEM_CPU_PREP 0x42 > diff --git a/nouveau/Makefile.am b/nouveau/Makefile.am > index 25ea6dc..76cdeca 100644 > --- a/nouveau/Makefile.am > +++ b/nouveau/Makefile.am > @@ -14,9 +14,18 @@ libdrm_nouveau_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@ > > libdrm_nouveau_la_SOURCES = $(LIBDRM_NOUVEAU_FILES) > > -libdrm_nouveauincludedir = ${includedir}/libdrm > +libdrm_nouveauincludedir = ${includedir}/libdrm/nouveau > libdrm_nouveauinclude_HEADERS = $(LIBDRM_NOUVEAU_H_FILES) > > +libdrm_nouveaunvifincludedir = ${includedir}/libdrm/nouveau/nvif > +libdrm_nouveaunvifinclude_HEADERS = nvif/class.h \ > + nvif/cl0080.h \ > + nvif/cl9097.h \ > + nvif/if0002.h \ > + nvif/if0003.h \ > + nvif/ioctl.h \ > + nvif/unpack.h > + > pkgconfigdir = @pkgconfigdir@ > pkgconfig_DATA = libdrm_nouveau.pc > > diff --git a/nouveau/libdrm_nouveau.pc.in b/nouveau/libdrm_nouveau.pc.in > index 9abfd81..7d0622e 100644 > --- a/nouveau/libdrm_nouveau.pc.in > +++ b/nouveau/libdrm_nouveau.pc.in > @@ -7,5 +7,5 @@ Name: libdrm_nouveau > Description: Userspace interface to nouveau kernel DRM services > Version: @PACKAGE_VERSION@ > Libs: -L${libdir} -ldrm_nouveau > -Cflags: -I${includedir} -I${includedir}/libdrm > +Cflags: -I${includedir} -I${includedir}/libdrm -I${includedir}/libdrm/nouveau > Requires.private: libdrm > diff --git a/nouveau/nvif/cl0080.h b/nouveau/nvif/cl0080.h > new file mode 100644 > index 0000000..331620a > --- /dev/null > +++ b/nouveau/nvif/cl0080.h > @@ -0,0 +1,45 @@ > +#ifndef __NVIF_CL0080_H__ > +#define __NVIF_CL0080_H__ > + > +struct nv_device_v0 { > + __u8 version; > + __u8 pad01[7]; > + __u64 device; /* device identifier, ~0 for client default */ > +}; > + > +#define NV_DEVICE_V0_INFO > 0x00 > +#define NV_DEVICE_V0_TIME > 0x01 > + > +struct nv_device_info_v0 { > + __u8 version; > +#define NV_DEVICE_INFO_V0_IGP > 0x00 > +#define NV_DEVICE_INFO_V0_PCI > 0x01 > +#define NV_DEVICE_INFO_V0_AGP > 0x02 > +#define NV_DEVICE_INFO_V0_PCIE > 0x03 > +#define NV_DEVICE_INFO_V0_SOC > 0x04 > + __u8 platform; > + __u16 chipset; /* from NV_PMC_BOOT_0 */ > + __u8 revision; /* from NV_PMC_BOOT_0 */ > +#define NV_DEVICE_INFO_V0_TNT > 0x01 > +#define NV_DEVICE_INFO_V0_CELSIUS > 0x02 > +#define NV_DEVICE_INFO_V0_KELVIN > 0x03 > +#define NV_DEVICE_INFO_V0_RANKINE > 0x04 > +#define NV_DEVICE_INFO_V0_CURIE > 0x05 > +#define NV_DEVICE_INFO_V0_TESLA > 0x06 > +#define NV_DEVICE_INFO_V0_FERMI > 0x07 > +#define NV_DEVICE_INFO_V0_KEPLER > 0x08 > +#define NV_DEVICE_INFO_V0_MAXWELL > 0x09 > + __u8 family; > + __u8 pad06[2]; > + __u64 ram_size; > + __u64 ram_user; > + char chip[16]; > + char name[64]; > +}; > + > +struct nv_device_time_v0 { > + __u8 version; > + __u8 pad01[7]; > + __u64 time; > +}; > +#endif > diff --git a/nouveau/nvif/cl9097.h b/nouveau/nvif/cl9097.h > new file mode 100644 > index 0000000..4057676 > --- /dev/null > +++ b/nouveau/nvif/cl9097.h > @@ -0,0 +1,44 @@ > +#ifndef __NVIF_CL9097_H__ > +#define __NVIF_CL9097_H__ > + > +#define FERMI_A_ZBC_COLOR > 0x00 > +#define FERMI_A_ZBC_DEPTH > 0x01 > + > +struct fermi_a_zbc_color_v0 { > + __u8 version; > +#define FERMI_A_ZBC_COLOR_V0_FMT_ZERO > 0x01 > +#define FERMI_A_ZBC_COLOR_V0_FMT_UNORM_ONE > 0x02 > +#define FERMI_A_ZBC_COLOR_V0_FMT_RF32_GF32_BF32_AF32 > 0x04 > +#define FERMI_A_ZBC_COLOR_V0_FMT_R16_G16_B16_A16 > 0x08 > +#define FERMI_A_ZBC_COLOR_V0_FMT_RN16_GN16_BN16_AN16 > 0x0c > +#define FERMI_A_ZBC_COLOR_V0_FMT_RS16_GS16_BS16_AS16 > 0x10 > +#define FERMI_A_ZBC_COLOR_V0_FMT_RU16_GU16_BU16_AU16 > 0x14 > +#define FERMI_A_ZBC_COLOR_V0_FMT_RF16_GF16_BF16_AF16 > 0x16 > +#define FERMI_A_ZBC_COLOR_V0_FMT_A8R8G8B8 > 0x18 > +#define FERMI_A_ZBC_COLOR_V0_FMT_A8RL8GL8BL8 > 0x1c > +#define FERMI_A_ZBC_COLOR_V0_FMT_A2B10G10R10 > 0x20 > +#define FERMI_A_ZBC_COLOR_V0_FMT_AU2BU10GU10RU10 > 0x24 > +#define FERMI_A_ZBC_COLOR_V0_FMT_A8B8G8R8 > 0x28 > +#define FERMI_A_ZBC_COLOR_V0_FMT_A8BL8GL8RL8 > 0x2c > +#define FERMI_A_ZBC_COLOR_V0_FMT_AN8BN8GN8RN8 > 0x30 > +#define FERMI_A_ZBC_COLOR_V0_FMT_AS8BS8GS8RS8 > 0x34 > +#define FERMI_A_ZBC_COLOR_V0_FMT_AU8BU8GU8RU8 > 0x38 > +#define FERMI_A_ZBC_COLOR_V0_FMT_A2R10G10B10 > 0x3c > +#define FERMI_A_ZBC_COLOR_V0_FMT_BF10GF11RF11 > 0x40 > + __u8 format; > + __u8 index; > + __u8 pad03[5]; > + __u32 ds[4]; > + __u32 l2[4]; > +}; > + > +struct fermi_a_zbc_depth_v0 { > + __u8 version; > +#define FERMI_A_ZBC_DEPTH_V0_FMT_FP32 > 0x01 > + __u8 format; > + __u8 index; > + __u8 pad03[5]; > + __u32 ds; > + __u32 l2; > +}; > +#endif > diff --git a/nouveau/nvif/class.h b/nouveau/nvif/class.h > new file mode 100644 > index 0000000..4179cd6 > --- /dev/null > +++ b/nouveau/nvif/class.h > @@ -0,0 +1,141 @@ > +#ifndef __NVIF_CLASS_H__ > +#define __NVIF_CLASS_H__ > + > +/* these class numbers are made up by us, and not nvidia-assigned */ > +#define NVIF_CLASS_CONTROL /* if0001.h */ > -1 > +#define NVIF_CLASS_PERFMON /* if0002.h */ > -2 > +#define NVIF_CLASS_PERFDOM /* if0003.h */ > -3 > +#define NVIF_CLASS_SW_NV04 /* if0004.h */ > -4 > +#define NVIF_CLASS_SW_NV10 /* if0005.h */ > -5 > +#define NVIF_CLASS_SW_NV50 /* if0005.h */ > -6 > +#define NVIF_CLASS_SW_GF100 /* if0005.h */ > -7 > + > +/* the below match nvidia-assigned (either in hw, or sw) class numbers */ > +#define NV_DEVICE /* cl0080.h */ > 0x00000080 > + > +#define NV_DMA_FROM_MEMORY /* cl0002.h */ > 0x00000002 > +#define NV_DMA_TO_MEMORY /* cl0002.h */ > 0x00000003 > +#define NV_DMA_IN_MEMORY /* cl0002.h */ > 0x0000003d > + > +#define FERMI_TWOD_A > 0x0000902d > + > +#define FERMI_MEMORY_TO_MEMORY_FORMAT_A > 0x00009039 > + > +#define KEPLER_INLINE_TO_MEMORY_A > 0x0000a040 > +#define KEPLER_INLINE_TO_MEMORY_B > 0x0000a140 > + > +#define NV04_DISP /* cl0046.h */ > 0x00000046 > + > +#define NV03_CHANNEL_DMA /* cl506b.h */ > 0x0000006b > +#define NV10_CHANNEL_DMA /* cl506b.h */ > 0x0000006e > +#define NV17_CHANNEL_DMA /* cl506b.h */ > 0x0000176e > +#define NV40_CHANNEL_DMA /* cl506b.h */ > 0x0000406e > +#define NV50_CHANNEL_DMA /* cl506e.h */ > 0x0000506e > +#define G82_CHANNEL_DMA /* cl826e.h */ > 0x0000826e > + > +#define NV50_CHANNEL_GPFIFO /* cl506f.h */ > 0x0000506f > +#define G82_CHANNEL_GPFIFO /* cl826f.h */ > 0x0000826f > +#define FERMI_CHANNEL_GPFIFO /* cl906f.h */ > 0x0000906f > +#define KEPLER_CHANNEL_GPFIFO_A /* cla06f.h */ > 0x0000a06f > +#define MAXWELL_CHANNEL_GPFIFO_A /* cla06f.h */ > 0x0000b06f > + > +#define NV50_DISP /* cl5070.h */ > 0x00005070 > +#define G82_DISP /* cl5070.h */ > 0x00008270 > +#define GT200_DISP /* cl5070.h */ > 0x00008370 > +#define GT214_DISP /* cl5070.h */ > 0x00008570 > +#define GT206_DISP /* cl5070.h */ > 0x00008870 > +#define GF110_DISP /* cl5070.h */ > 0x00009070 > +#define GK104_DISP /* cl5070.h */ > 0x00009170 > +#define GK110_DISP /* cl5070.h */ > 0x00009270 > +#define GM107_DISP /* cl5070.h */ > 0x00009470 > +#define GM204_DISP /* cl5070.h */ > 0x00009570 > + > +#define NV31_MPEG > 0x00003174 > +#define G82_MPEG > 0x00008274 > + > +#define NV74_VP2 > 0x00007476 > + > +#define NV50_DISP_CURSOR /* cl507a.h */ > 0x0000507a > +#define G82_DISP_CURSOR /* cl507a.h */ > 0x0000827a > +#define GT214_DISP_CURSOR /* cl507a.h */ > 0x0000857a > +#define GF110_DISP_CURSOR /* cl507a.h */ > 0x0000907a > +#define GK104_DISP_CURSOR /* cl507a.h */ > 0x0000917a > + > +#define NV50_DISP_OVERLAY /* cl507b.h */ > 0x0000507b > +#define G82_DISP_OVERLAY /* cl507b.h */ > 0x0000827b > +#define GT214_DISP_OVERLAY /* cl507b.h */ > 0x0000857b > +#define GF110_DISP_OVERLAY /* cl507b.h */ > 0x0000907b > +#define GK104_DISP_OVERLAY /* cl507b.h */ > 0x0000917b > + > +#define NV50_DISP_BASE_CHANNEL_DMA /* cl507c.h */ > 0x0000507c > +#define G82_DISP_BASE_CHANNEL_DMA /* cl507c.h */ > 0x0000827c > +#define GT200_DISP_BASE_CHANNEL_DMA /* cl507c.h */ > 0x0000837c > +#define GT214_DISP_BASE_CHANNEL_DMA /* cl507c.h */ > 0x0000857c > +#define GF110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ > 0x0000907c > +#define GK104_DISP_BASE_CHANNEL_DMA /* cl507c.h */ > 0x0000917c > +#define GK110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ > 0x0000927c > + > +#define NV50_DISP_CORE_CHANNEL_DMA /* cl507d.h */ > 0x0000507d > +#define G82_DISP_CORE_CHANNEL_DMA /* cl507d.h */ > 0x0000827d > +#define GT200_DISP_CORE_CHANNEL_DMA /* cl507d.h */ > 0x0000837d > +#define GT214_DISP_CORE_CHANNEL_DMA /* cl507d.h */ > 0x0000857d > +#define GT206_DISP_CORE_CHANNEL_DMA /* cl507d.h */ > 0x0000887d > +#define GF110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ > 0x0000907d > +#define GK104_DISP_CORE_CHANNEL_DMA /* cl507d.h */ > 0x0000917d > +#define GK110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ > 0x0000927d > +#define GM107_DISP_CORE_CHANNEL_DMA /* cl507d.h */ > 0x0000947d > +#define GM204_DISP_CORE_CHANNEL_DMA /* cl507d.h */ > 0x0000957d > + > +#define NV50_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ > 0x0000507e > +#define G82_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ > 0x0000827e > +#define GT200_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ > 0x0000837e > +#define GT214_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ > 0x0000857e > +#define GF110_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ > 0x0000907e > +#define GK104_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ > 0x0000917e > + > +#define FERMI_A /* cl9097.h */ > 0x00009097 > +#define FERMI_B /* cl9097.h */ > 0x00009197 > +#define FERMI_C /* cl9097.h */ > 0x00009297 > + > +#define KEPLER_A /* cl9097.h */ > 0x0000a097 > +#define KEPLER_B /* cl9097.h */ > 0x0000a197 > +#define KEPLER_C /* cl9097.h */ > 0x0000a297 > + > +#define MAXWELL_A /* cl9097.h */ > 0x0000b097 > +#define MAXWELL_B /* cl9097.h */ > 0x0000b197 > + > +#define NV74_BSP > 0x000074b0 > + > +#define GT212_MSVLD > 0x000085b1 > +#define IGT21A_MSVLD > 0x000086b1 > +#define G98_MSVLD > 0x000088b1 > +#define GF100_MSVLD > 0x000090b1 > +#define GK104_MSVLD > 0x000095b1 > + > +#define GT212_MSPDEC > 0x000085b2 > +#define G98_MSPDEC > 0x000088b2 > +#define GF100_MSPDEC > 0x000090b2 > +#define GK104_MSPDEC > 0x000095b2 > + > +#define GT212_MSPPP > 0x000085b3 > +#define G98_MSPPP > 0x000088b3 > +#define GF100_MSPPP > 0x000090b3 > + > +#define G98_SEC > 0x000088b4 > + > +#define GT212_DMA > 0x000085b5 > +#define FERMI_DMA > 0x000090b5 > +#define KEPLER_DMA_COPY_A > 0x0000a0b5 > +#define MAXWELL_DMA_COPY_A > 0x0000b0b5 > + > +#define FERMI_DECOMPRESS > 0x000090b8 > + > +#define FERMI_COMPUTE_A > 0x000090c0 > +#define FERMI_COMPUTE_B > 0x000091c0 > +#define KEPLER_COMPUTE_A > 0x0000a0c0 > +#define KEPLER_COMPUTE_B > 0x0000a1c0 > +#define MAXWELL_COMPUTE_A > 0x0000b0c0 > +#define MAXWELL_COMPUTE_B > 0x0000b1c0 > + > +#define NV74_CIPHER > 0x000074c1 > +#endif > diff --git a/nouveau/nvif/if0002.h b/nouveau/nvif/if0002.h > new file mode 100644 > index 0000000..c04c91d > --- /dev/null > +++ b/nouveau/nvif/if0002.h > @@ -0,0 +1,38 @@ > +#ifndef __NVIF_IF0002_H__ > +#define __NVIF_IF0002_H__ > + > +#define NVIF_PERFMON_V0_QUERY_DOMAIN > 0x00 > +#define NVIF_PERFMON_V0_QUERY_SIGNAL > 0x01 > +#define NVIF_PERFMON_V0_QUERY_SOURCE > 0x02 > + > +struct nvif_perfmon_query_domain_v0 { > + __u8 version; > + __u8 id; > + __u8 counter_nr; > + __u8 iter; > + __u16 signal_nr; > + __u8 pad05[2]; > + char name[64]; > +}; > + > +struct nvif_perfmon_query_signal_v0 { > + __u8 version; > + __u8 domain; > + __u16 iter; > + __u8 signal; > + __u8 source_nr; > + __u8 pad05[2]; > + char name[64]; > +}; > + > +struct nvif_perfmon_query_source_v0 { > + __u8 version; > + __u8 domain; > + __u8 signal; > + __u8 iter; > + __u8 pad04[4]; > + __u32 source; > + __u32 mask; > + char name[64]; > +}; > +#endif > diff --git a/nouveau/nvif/if0003.h b/nouveau/nvif/if0003.h > new file mode 100644 > index 0000000..0cd03ef > --- /dev/null > +++ b/nouveau/nvif/if0003.h > @@ -0,0 +1,33 @@ > +#ifndef __NVIF_IF0003_H__ > +#define __NVIF_IF0003_H__ > + > +struct nvif_perfdom_v0 { > + __u8 version; > + __u8 domain; > + __u8 mode; > + __u8 pad03[1]; > + struct { > + __u8 signal[4]; > + __u64 source[4][8]; > + __u16 logic_op; > + } ctr[4]; > +}; > + > +#define NVIF_PERFDOM_V0_INIT > 0x00 > +#define NVIF_PERFDOM_V0_SAMPLE > 0x01 > +#define NVIF_PERFDOM_V0_READ > 0x02 > + > +struct nvif_perfdom_init { > +}; > + > +struct nvif_perfdom_sample { > +}; > + > +struct nvif_perfdom_read_v0 { > + __u8 version; > + __u8 pad01[7]; > + __u32 ctr[4]; > + __u32 clk; > + __u8 pad04[4]; > +}; > +#endif > diff --git a/nouveau/nvif/ioctl.h b/nouveau/nvif/ioctl.h > new file mode 100644 > index 0000000..c5f5eb8 > --- /dev/null > +++ b/nouveau/nvif/ioctl.h > @@ -0,0 +1,132 @@ > +#ifndef __NVIF_IOCTL_H__ > +#define __NVIF_IOCTL_H__ > + > +#define NVIF_VERSION_LATEST > 0x0000000000000000ULL > + > +struct nvif_ioctl_v0 { > + __u8 version; > +#define NVIF_IOCTL_V0_NOP > 0x00 > +#define NVIF_IOCTL_V0_SCLASS > 0x01 > +#define NVIF_IOCTL_V0_NEW > 0x02 > +#define NVIF_IOCTL_V0_DEL > 0x03 > +#define NVIF_IOCTL_V0_MTHD > 0x04 > +#define NVIF_IOCTL_V0_RD > 0x05 > +#define NVIF_IOCTL_V0_WR > 0x06 > +#define NVIF_IOCTL_V0_MAP > 0x07 > +#define NVIF_IOCTL_V0_UNMAP > 0x08 > +#define NVIF_IOCTL_V0_NTFY_NEW > 0x09 > +#define NVIF_IOCTL_V0_NTFY_DEL > 0x0a > +#define NVIF_IOCTL_V0_NTFY_GET > 0x0b > +#define NVIF_IOCTL_V0_NTFY_PUT > 0x0c > + __u8 type; > + __u8 pad02[4]; > +#define NVIF_IOCTL_V0_OWNER_NVIF > 0x00 > +#define NVIF_IOCTL_V0_OWNER_ANY > 0xff > + __u8 owner; > +#define NVIF_IOCTL_V0_ROUTE_NVIF > 0x00 > +#define NVIF_IOCTL_V0_ROUTE_HIDDEN > 0xff > + __u8 route; > + __u64 token; > + __u64 object; > + __u8 data[]; /* ioctl data (below) */ > +}; > + > +struct nvif_ioctl_nop_v0 { > + __u64 version; > +}; > + > +struct nvif_ioctl_sclass_v0 { > + /* nvif_ioctl ... */ > + __u8 version; > + __u8 count; > + __u8 pad02[6]; > + struct nvif_ioctl_sclass_oclass_v0 { > + __s32 oclass; > + __s16 minver; > + __s16 maxver; > + } oclass[]; > +}; > + > +struct nvif_ioctl_new_v0 { > + /* nvif_ioctl ... */ > + __u8 version; > + __u8 pad01[6]; > + __u8 route; > + __u64 token; > + __u64 object; > + __u32 handle; > + __s32 oclass; > + __u8 data[]; /* class data (class.h) */ > +}; > + > +struct nvif_ioctl_del { > +}; > + > +struct nvif_ioctl_rd_v0 { > + /* nvif_ioctl ... */ > + __u8 version; > + __u8 size; > + __u8 pad02[2]; > + __u32 data; > + __u64 addr; > +}; > + > +struct nvif_ioctl_wr_v0 { > + /* nvif_ioctl ... */ > + __u8 version; > + __u8 size; > + __u8 pad02[2]; > + __u32 data; > + __u64 addr; > +}; > + > +struct nvif_ioctl_map_v0 { > + /* nvif_ioctl ... */ > + __u8 version; > + __u8 pad01[3]; > + __u32 length; > + __u64 handle; > +}; > + > +struct nvif_ioctl_unmap { > +}; > + > +struct nvif_ioctl_ntfy_new_v0 { > + /* nvif_ioctl ... */ > + __u8 version; > + __u8 event; > + __u8 index; > + __u8 pad03[5]; > + __u8 data[]; /* event request data (event.h) */ > +}; > + > +struct nvif_ioctl_ntfy_del_v0 { > + /* nvif_ioctl ... */ > + __u8 version; > + __u8 index; > + __u8 pad02[6]; > +}; > + > +struct nvif_ioctl_ntfy_get_v0 { > + /* nvif_ioctl ... */ > + __u8 version; > + __u8 index; > + __u8 pad02[6]; > +}; > + > +struct nvif_ioctl_ntfy_put_v0 { > + /* nvif_ioctl ... */ > + __u8 version; > + __u8 index; > + __u8 pad02[6]; > +}; > + > +struct nvif_ioctl_mthd_v0 { > + /* nvif_ioctl ... */ > + __u8 version; > + __u8 method; > + __u8 pad02[6]; > + __u8 data[]; /* method data (class.h) */ > +}; > + > +#endif > diff --git a/nouveau/nvif/unpack.h b/nouveau/nvif/unpack.h > new file mode 100644 > index 0000000..751bcf4 > --- /dev/null > +++ b/nouveau/nvif/unpack.h > @@ -0,0 +1,28 @@ > +#ifndef __NVIF_UNPACK_H__ > +#define __NVIF_UNPACK_H__ > + > +#define nvif_unvers(r,d,s,m) ({ > \ > + void **_data = (d); __u32 *_size = (s); int _ret = (r); \ > + if (_ret == -ENOSYS && *_size == sizeof(m)) { \ > + *_data = NULL; \ > + *_size = _ret = 0; \ > + } \ > + _ret; \ > +}) > + > +#define nvif_unpack(r,d,s,m,vl,vh,x) ({ > \ > + void **_data = (d); __u32 *_size = (s); \ > + int _ret = (r), _vl = (vl), _vh = (vh); \ > + if (_ret == -ENOSYS && *_size >= sizeof(m) && \ > + (m).version >= _vl && (m).version <= _vh) { \ > + *_data = (__u8 *)*_data + sizeof(m); \ > + *_size = *_size - sizeof(m); \ > + if (_ret = 0, !(x)) { \ > + _ret = *_size ? -E2BIG : 0; \ > + *_data = NULL; \ > + *_size = 0; \ > + } \ > + } \ > + _ret; \ > +}) > +#endif >
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Nouveau mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/nouveau
