Loading include/linux/virtio_config.h +134 −0 Original line number Diff line number Diff line Loading @@ -162,5 +162,139 @@ int virtqueue_set_affinity(struct virtqueue *vq, int cpu) return 0; } /* Config space accessors. */ #define virtio_cread(vdev, structname, member, ptr) \ do { \ /* Must match the member's type, and be integer */ \ if (!typecheck(typeof((((structname*)0)->member)), *(ptr))) \ (*ptr) = 1; \ \ switch (sizeof(*ptr)) { \ case 1: \ *(ptr) = virtio_cread8(vdev, \ offsetof(structname, member)); \ break; \ case 2: \ *(ptr) = virtio_cread16(vdev, \ offsetof(structname, member)); \ break; \ case 4: \ *(ptr) = virtio_cread32(vdev, \ offsetof(structname, member)); \ break; \ case 8: \ *(ptr) = virtio_cread64(vdev, \ offsetof(structname, member)); \ break; \ default: \ BUG(); \ } \ } while(0) /* Config space accessors. */ #define virtio_cwrite(vdev, structname, member, ptr) \ do { \ /* Must match the member's type, and be integer */ \ if (!typecheck(typeof((((structname*)0)->member)), *(ptr))) \ BUG_ON((*ptr) == 1); \ \ switch (sizeof(*ptr)) { \ case 1: \ virtio_cwrite8(vdev, \ offsetof(structname, member), \ *(ptr)); \ break; \ case 2: \ virtio_cwrite16(vdev, \ offsetof(structname, member), \ *(ptr)); \ break; \ case 4: \ virtio_cwrite32(vdev, \ offsetof(structname, member), \ *(ptr)); \ break; \ case 8: \ virtio_cwrite64(vdev, \ offsetof(structname, member), \ *(ptr)); \ break; \ default: \ BUG(); \ } \ } while(0) static inline u8 virtio_cread8(struct virtio_device *vdev, unsigned int offset) { u8 ret; vdev->config->get(vdev, offset, &ret, sizeof(ret)); return ret; } static inline void virtio_cread_bytes(struct virtio_device *vdev, unsigned int offset, void *buf, size_t len) { vdev->config->get(vdev, offset, buf, len); } static inline void virtio_cwrite8(struct virtio_device *vdev, unsigned int offset, u8 val) { vdev->config->set(vdev, offset, &val, sizeof(val)); } static inline u16 virtio_cread16(struct virtio_device *vdev, unsigned int offset) { u16 ret; vdev->config->get(vdev, offset, &ret, sizeof(ret)); return ret; } static inline void virtio_cwrite16(struct virtio_device *vdev, unsigned int offset, u16 val) { vdev->config->set(vdev, offset, &val, sizeof(val)); } static inline u32 virtio_cread32(struct virtio_device *vdev, unsigned int offset) { u32 ret; vdev->config->get(vdev, offset, &ret, sizeof(ret)); return ret; } static inline void virtio_cwrite32(struct virtio_device *vdev, unsigned int offset, u32 val) { vdev->config->set(vdev, offset, &val, sizeof(val)); } static inline u64 virtio_cread64(struct virtio_device *vdev, unsigned int offset) { u64 ret; vdev->config->get(vdev, offset, &ret, sizeof(ret)); return ret; } static inline void virtio_cwrite64(struct virtio_device *vdev, unsigned int offset, u64 val) { vdev->config->set(vdev, offset, &val, sizeof(val)); } /* Conditional config space accessors. */ #define virtio_cread_feature(vdev, fbit, structname, member, ptr) \ ({ \ int _r = 0; \ if (!virtio_has_feature(vdev, fbit)) \ _r = -ENOENT; \ else \ virtio_cread((vdev), structname, member, ptr); \ _r; \ }) #endif /* _LINUX_VIRTIO_CONFIG_H */ Loading
include/linux/virtio_config.h +134 −0 Original line number Diff line number Diff line Loading @@ -162,5 +162,139 @@ int virtqueue_set_affinity(struct virtqueue *vq, int cpu) return 0; } /* Config space accessors. */ #define virtio_cread(vdev, structname, member, ptr) \ do { \ /* Must match the member's type, and be integer */ \ if (!typecheck(typeof((((structname*)0)->member)), *(ptr))) \ (*ptr) = 1; \ \ switch (sizeof(*ptr)) { \ case 1: \ *(ptr) = virtio_cread8(vdev, \ offsetof(structname, member)); \ break; \ case 2: \ *(ptr) = virtio_cread16(vdev, \ offsetof(structname, member)); \ break; \ case 4: \ *(ptr) = virtio_cread32(vdev, \ offsetof(structname, member)); \ break; \ case 8: \ *(ptr) = virtio_cread64(vdev, \ offsetof(structname, member)); \ break; \ default: \ BUG(); \ } \ } while(0) /* Config space accessors. */ #define virtio_cwrite(vdev, structname, member, ptr) \ do { \ /* Must match the member's type, and be integer */ \ if (!typecheck(typeof((((structname*)0)->member)), *(ptr))) \ BUG_ON((*ptr) == 1); \ \ switch (sizeof(*ptr)) { \ case 1: \ virtio_cwrite8(vdev, \ offsetof(structname, member), \ *(ptr)); \ break; \ case 2: \ virtio_cwrite16(vdev, \ offsetof(structname, member), \ *(ptr)); \ break; \ case 4: \ virtio_cwrite32(vdev, \ offsetof(structname, member), \ *(ptr)); \ break; \ case 8: \ virtio_cwrite64(vdev, \ offsetof(structname, member), \ *(ptr)); \ break; \ default: \ BUG(); \ } \ } while(0) static inline u8 virtio_cread8(struct virtio_device *vdev, unsigned int offset) { u8 ret; vdev->config->get(vdev, offset, &ret, sizeof(ret)); return ret; } static inline void virtio_cread_bytes(struct virtio_device *vdev, unsigned int offset, void *buf, size_t len) { vdev->config->get(vdev, offset, buf, len); } static inline void virtio_cwrite8(struct virtio_device *vdev, unsigned int offset, u8 val) { vdev->config->set(vdev, offset, &val, sizeof(val)); } static inline u16 virtio_cread16(struct virtio_device *vdev, unsigned int offset) { u16 ret; vdev->config->get(vdev, offset, &ret, sizeof(ret)); return ret; } static inline void virtio_cwrite16(struct virtio_device *vdev, unsigned int offset, u16 val) { vdev->config->set(vdev, offset, &val, sizeof(val)); } static inline u32 virtio_cread32(struct virtio_device *vdev, unsigned int offset) { u32 ret; vdev->config->get(vdev, offset, &ret, sizeof(ret)); return ret; } static inline void virtio_cwrite32(struct virtio_device *vdev, unsigned int offset, u32 val) { vdev->config->set(vdev, offset, &val, sizeof(val)); } static inline u64 virtio_cread64(struct virtio_device *vdev, unsigned int offset) { u64 ret; vdev->config->get(vdev, offset, &ret, sizeof(ret)); return ret; } static inline void virtio_cwrite64(struct virtio_device *vdev, unsigned int offset, u64 val) { vdev->config->set(vdev, offset, &val, sizeof(val)); } /* Conditional config space accessors. */ #define virtio_cread_feature(vdev, fbit, structname, member, ptr) \ ({ \ int _r = 0; \ if (!virtio_has_feature(vdev, fbit)) \ _r = -ENOENT; \ else \ virtio_cread((vdev), structname, member, ptr); \ _r; \ }) #endif /* _LINUX_VIRTIO_CONFIG_H */