189e0f4d2SKip Macy /* 289e0f4d2SKip Macy * 389e0f4d2SKip Macy * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 489e0f4d2SKip Macy * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 589e0f4d2SKip Macy * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 689e0f4d2SKip Macy * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 789e0f4d2SKip Macy * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 889e0f4d2SKip Macy * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 989e0f4d2SKip Macy * IN THE SOFTWARE. 1089e0f4d2SKip Macy * 1189e0f4d2SKip Macy * $FreeBSD$ 1289e0f4d2SKip Macy */ 1389e0f4d2SKip Macy 1489e0f4d2SKip Macy 1589e0f4d2SKip Macy #ifndef __XEN_DRIVERS_BLOCK_H__ 1689e0f4d2SKip Macy #define __XEN_DRIVERS_BLOCK_H__ 1789e0f4d2SKip Macy #include <xen/interface/io/blkif.h> 1889e0f4d2SKip Macy 1989e0f4d2SKip Macy struct xlbd_type_info 2089e0f4d2SKip Macy { 2189e0f4d2SKip Macy int partn_shift; 2289e0f4d2SKip Macy int disks_per_major; 2389e0f4d2SKip Macy char *devname; 2489e0f4d2SKip Macy char *diskname; 2589e0f4d2SKip Macy }; 2689e0f4d2SKip Macy 2789e0f4d2SKip Macy struct xlbd_major_info 2889e0f4d2SKip Macy { 2989e0f4d2SKip Macy int major; 3089e0f4d2SKip Macy int index; 3189e0f4d2SKip Macy int usage; 3289e0f4d2SKip Macy struct xlbd_type_info *type; 3389e0f4d2SKip Macy }; 3489e0f4d2SKip Macy 3589e0f4d2SKip Macy struct blk_shadow { 3689e0f4d2SKip Macy blkif_request_t req; 3789e0f4d2SKip Macy unsigned long request; 3889e0f4d2SKip Macy unsigned long frame[BLKIF_MAX_SEGMENTS_PER_REQUEST]; 3989e0f4d2SKip Macy }; 4089e0f4d2SKip Macy 4189e0f4d2SKip Macy #define BLK_RING_SIZE __RING_SIZE((blkif_sring_t *)0, PAGE_SIZE) 4289e0f4d2SKip Macy 4389e0f4d2SKip Macy 4489e0f4d2SKip Macy struct xb_softc { 4589e0f4d2SKip Macy device_t xb_dev; 4689e0f4d2SKip Macy struct disk *xb_disk; /* disk params */ 4789e0f4d2SKip Macy struct bio_queue_head xb_bioq; /* sort queue */ 4889e0f4d2SKip Macy int xb_unit; 4989e0f4d2SKip Macy int xb_flags; 5089e0f4d2SKip Macy struct blkfront_info *xb_info; 5189e0f4d2SKip Macy LIST_ENTRY(xb_softc) entry; 5289e0f4d2SKip Macy #define XB_OPEN (1<<0) /* drive is open (can't shut down) */ 5389e0f4d2SKip Macy }; 5489e0f4d2SKip Macy 5589e0f4d2SKip Macy 5689e0f4d2SKip Macy /* 5789e0f4d2SKip Macy * We have one of these per vbd, whether ide, scsi or 'other'. They 5889e0f4d2SKip Macy * hang in private_data off the gendisk structure. We may end up 5989e0f4d2SKip Macy * putting all kinds of interesting stuff here :-) 6089e0f4d2SKip Macy */ 6189e0f4d2SKip Macy struct blkfront_info 6289e0f4d2SKip Macy { 6389e0f4d2SKip Macy struct xenbus_device *xbdev; 6489e0f4d2SKip Macy dev_t dev; 6589e0f4d2SKip Macy struct gendisk *gd; 6689e0f4d2SKip Macy int vdevice; 6789e0f4d2SKip Macy blkif_vdev_t handle; 6889e0f4d2SKip Macy int connected; 6989e0f4d2SKip Macy int ring_ref; 7089e0f4d2SKip Macy blkif_front_ring_t ring; 7189e0f4d2SKip Macy unsigned int irq; 7289e0f4d2SKip Macy struct xlbd_major_info *mi; 7389e0f4d2SKip Macy #if 0 7489e0f4d2SKip Macy request_queue_t *rq; 7589e0f4d2SKip Macy struct work_struct work; 7689e0f4d2SKip Macy #endif 7789e0f4d2SKip Macy struct gnttab_free_callback callback; 7889e0f4d2SKip Macy struct blk_shadow shadow[BLK_RING_SIZE]; 7989e0f4d2SKip Macy unsigned long shadow_free; 8089e0f4d2SKip Macy struct xb_softc *sc; 8189e0f4d2SKip Macy int feature_barrier; 8289e0f4d2SKip Macy int is_ready; 8389e0f4d2SKip Macy /** 8489e0f4d2SKip Macy * The number of people holding this device open. We won't allow a 8589e0f4d2SKip Macy * hot-unplug unless this is 0. 8689e0f4d2SKip Macy */ 8789e0f4d2SKip Macy int users; 8889e0f4d2SKip Macy }; 8989e0f4d2SKip Macy /* Note that xlvbd_add doesn't call add_disk for you: you're expected 9089e0f4d2SKip Macy to call add_disk on info->gd once the disk is properly connected 9189e0f4d2SKip Macy up. */ 9289e0f4d2SKip Macy int xlvbd_add(blkif_sector_t capacity, int device, 9389e0f4d2SKip Macy uint16_t vdisk_info, uint16_t sector_size, struct blkfront_info *info); 9489e0f4d2SKip Macy void xlvbd_del(struct blkfront_info *info); 9589e0f4d2SKip Macy 9689e0f4d2SKip Macy #endif /* __XEN_DRIVERS_BLOCK_H__ */ 9789e0f4d2SKip Macy 98