| 
									
										
										
										
											2009-10-07 16:56:22 +02:00
										 |  |  | #ifndef HW_IDE_PCI_H
 | 
					
						
							|  |  |  | #define HW_IDE_PCI_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <hw/ide/internal.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-15 00:23:00 +01:00
										 |  |  | typedef struct BMDMAState { | 
					
						
							|  |  |  |     IDEDMA dma; | 
					
						
							|  |  |  |     uint8_t cmd; | 
					
						
							|  |  |  |     uint8_t status; | 
					
						
							|  |  |  |     uint32_t addr; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     IDEBus *bus; | 
					
						
							|  |  |  |     /* current transfer state */ | 
					
						
							|  |  |  |     uint32_t cur_addr; | 
					
						
							|  |  |  |     uint32_t cur_prd_last; | 
					
						
							|  |  |  |     uint32_t cur_prd_addr; | 
					
						
							|  |  |  |     uint32_t cur_prd_len; | 
					
						
							|  |  |  |     uint8_t unit; | 
					
						
							|  |  |  |     BlockDriverCompletionFunc *dma_cb; | 
					
						
							|  |  |  |     int64_t sector_num; | 
					
						
							|  |  |  |     uint32_t nsector; | 
					
						
							| 
									
										
										
										
											2011-08-08 16:09:11 +03:00
										 |  |  |     MemoryRegion addr_ioport; | 
					
						
							|  |  |  |     MemoryRegion extra_io; | 
					
						
							| 
									
										
										
										
											2010-12-15 00:23:00 +01:00
										 |  |  |     QEMUBH *bh; | 
					
						
							|  |  |  |     qemu_irq irq; | 
					
						
							| 
									
										
										
										
											2011-05-26 15:00:34 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* Bit 0-2 and 7:   BM status register
 | 
					
						
							|  |  |  |      * Bit 3-6:         bus->error_status */ | 
					
						
							|  |  |  |     uint8_t migration_compat_status; | 
					
						
							| 
									
										
										
										
											2011-08-08 16:09:11 +03:00
										 |  |  |     struct PCIIDEState *pci_dev; | 
					
						
							| 
									
										
										
										
											2010-12-15 00:23:00 +01:00
										 |  |  | } BMDMAState; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-08 16:09:11 +03:00
										 |  |  | typedef struct CMD646BAR { | 
					
						
							|  |  |  |     MemoryRegion cmd; | 
					
						
							|  |  |  |     MemoryRegion data; | 
					
						
							|  |  |  |     IDEBus *bus; | 
					
						
							|  |  |  |     struct PCIIDEState *pci_dev; | 
					
						
							|  |  |  | } CMD646BAR; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-07 16:56:22 +02:00
										 |  |  | typedef struct PCIIDEState { | 
					
						
							|  |  |  |     PCIDevice dev; | 
					
						
							|  |  |  |     IDEBus bus[2]; | 
					
						
							|  |  |  |     BMDMAState bmdma[2]; | 
					
						
							| 
									
										
										
										
											2009-10-07 16:56:26 +02:00
										 |  |  |     uint32_t secondary; /* used only for cmd646 */ | 
					
						
							| 
									
										
										
										
											2011-08-08 16:09:11 +03:00
										 |  |  |     MemoryRegion bmdma_bar; | 
					
						
							|  |  |  |     CMD646BAR cmd646_bar[2]; /* used only for cmd646 */ | 
					
						
							| 
									
										
										
										
											2009-10-07 16:56:22 +02:00
										 |  |  | } PCIIDEState; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-15 00:23:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | static inline IDEState *bmdma_active_if(BMDMAState *bmdma) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     assert(bmdma->unit != (uint8_t)-1); | 
					
						
							|  |  |  |     return bmdma->bus->ifs + bmdma->unit; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-08 16:09:11 +03:00
										 |  |  | void bmdma_init(IDEBus *bus, BMDMAState *bm, PCIIDEState *d); | 
					
						
							|  |  |  | void bmdma_cmd_writeb(BMDMAState *bm, uint32_t val); | 
					
						
							|  |  |  | extern MemoryRegionOps bmdma_addr_ioport_ops; | 
					
						
							| 
									
										
										
										
											2009-10-07 16:56:23 +02:00
										 |  |  | void pci_ide_create_devs(PCIDevice *dev, DriveInfo **hd_table); | 
					
						
							| 
									
										
										
										
											2009-10-07 20:55:32 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | extern const VMStateDescription vmstate_ide_pci; | 
					
						
							| 
									
										
										
										
											2009-10-07 16:56:22 +02:00
										 |  |  | #endif
 |