PCI: Add and use standard PCI-X Capability register names
Add and use #defines for PCI-X Capability registers and fields. Note that the PCI-X Capability has a different layout for type 0 (endpoint) and type 1 (bridge) devices. Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
		
					parent
					
						
							
								8f0d8163b5
							
						
					
				
			
			
				commit
				
					
						7793eeabc8
					
				
			
		
					 2 changed files with 23 additions and 7 deletions
				
			
		|  | @ -579,14 +579,16 @@ static void pci_set_bus_speed(struct pci_bus *bus) | ||||||
| 	if (pos) { | 	if (pos) { | ||||||
| 		u16 status; | 		u16 status; | ||||||
| 		enum pci_bus_speed max; | 		enum pci_bus_speed max; | ||||||
| 		pci_read_config_word(bridge, pos + 2, &status); |  | ||||||
| 
 | 
 | ||||||
| 		if (status & 0x8000) { | 		pci_read_config_word(bridge, pos + PCI_X_BRIDGE_SSTATUS, | ||||||
|  | 				     &status); | ||||||
|  | 
 | ||||||
|  | 		if (status & PCI_X_SSTATUS_533MHZ) { | ||||||
| 			max = PCI_SPEED_133MHz_PCIX_533; | 			max = PCI_SPEED_133MHz_PCIX_533; | ||||||
| 		} else if (status & 0x4000) { | 		} else if (status & PCI_X_SSTATUS_266MHZ) { | ||||||
| 			max = PCI_SPEED_133MHz_PCIX_266; | 			max = PCI_SPEED_133MHz_PCIX_266; | ||||||
| 		} else if (status & 0x0002) { | 		} else if (status & PCI_X_SSTATUS_133MHZ) { | ||||||
| 			if (((status >> 12) & 0x3) == 2) { | 			if ((status & PCI_X_SSTATUS_VERS) == PCI_X_SSTATUS_V2) { | ||||||
| 				max = PCI_SPEED_133MHz_PCIX_ECC; | 				max = PCI_SPEED_133MHz_PCIX_ECC; | ||||||
| 			} else { | 			} else { | ||||||
| 				max = PCI_SPEED_133MHz_PCIX; | 				max = PCI_SPEED_133MHz_PCIX; | ||||||
|  | @ -596,7 +598,8 @@ static void pci_set_bus_speed(struct pci_bus *bus) | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		bus->max_bus_speed = max; | 		bus->max_bus_speed = max; | ||||||
| 		bus->cur_bus_speed = pcix_bus_speed[(status >> 6) & 0xf]; | 		bus->cur_bus_speed = pcix_bus_speed[ | ||||||
|  | 			(status & PCI_X_SSTATUS_FREQ) >> 6]; | ||||||
| 
 | 
 | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -349,7 +349,7 @@ | ||||||
| #define  PCI_AF_STATUS_TP	0x01 | #define  PCI_AF_STATUS_TP	0x01 | ||||||
| #define PCI_CAP_AF_SIZEOF	6	/* size of AF registers */ | #define PCI_CAP_AF_SIZEOF	6	/* size of AF registers */ | ||||||
| 
 | 
 | ||||||
| /* PCI-X registers */ | /* PCI-X registers (Type 0 (non-bridge) devices) */ | ||||||
| 
 | 
 | ||||||
| #define PCI_X_CMD		2	/* Modes & Features */ | #define PCI_X_CMD		2	/* Modes & Features */ | ||||||
| #define  PCI_X_CMD_DPERR_E	0x0001	/* Data Parity Error Recovery Enable */ | #define  PCI_X_CMD_DPERR_E	0x0001	/* Data Parity Error Recovery Enable */ | ||||||
|  | @ -389,6 +389,19 @@ | ||||||
| #define PCI_CAP_PCIX_SIZEOF_V1	24	/* size for Version 1 */ | #define PCI_CAP_PCIX_SIZEOF_V1	24	/* size for Version 1 */ | ||||||
| #define PCI_CAP_PCIX_SIZEOF_V2	PCI_CAP_PCIX_SIZEOF_V1	/* Same for v2 */ | #define PCI_CAP_PCIX_SIZEOF_V2	PCI_CAP_PCIX_SIZEOF_V1	/* Same for v2 */ | ||||||
| 
 | 
 | ||||||
|  | /* PCI-X registers (Type 1 (bridge) devices) */ | ||||||
|  | 
 | ||||||
|  | #define PCI_X_BRIDGE_SSTATUS	2	/* Secondary Status */ | ||||||
|  | #define  PCI_X_SSTATUS_64BIT	0x0001	/* Secondary AD interface is 64 bits */ | ||||||
|  | #define  PCI_X_SSTATUS_133MHZ	0x0002	/* 133 MHz capable */ | ||||||
|  | #define  PCI_X_SSTATUS_FREQ	0x03c0	/* Secondary Bus Mode and Frequency */ | ||||||
|  | #define  PCI_X_SSTATUS_VERS	0x3000	/* PCI-X Capability Version */ | ||||||
|  | #define  PCI_X_SSTATUS_V1	0x1000	/* Mode 2, not Mode 1 */ | ||||||
|  | #define  PCI_X_SSTATUS_V2	0x2000	/* Mode 1 or Modes 1 and 2 */ | ||||||
|  | #define  PCI_X_SSTATUS_266MHZ	0x4000	/* 266 MHz capable */ | ||||||
|  | #define  PCI_X_SSTATUS_533MHZ	0x8000	/* 533 MHz capable */ | ||||||
|  | #define PCI_X_BRIDGE_STATUS	4	/* Bridge Status */ | ||||||
|  | 
 | ||||||
| /* PCI Bridge Subsystem ID registers */ | /* PCI Bridge Subsystem ID registers */ | ||||||
| 
 | 
 | ||||||
| #define PCI_SSVID_VENDOR_ID     4	/* PCI-Bridge subsystem vendor id register */ | #define PCI_SSVID_VENDOR_ID     4	/* PCI-Bridge subsystem vendor id register */ | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Bjorn Helgaas
				Bjorn Helgaas