mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	PCI: endpoint: Add helper to get first unreserved BAR
Add a helper function pci_epc_get_first_free_bar() to get the first unreserved BAR that can be used for endpoint function. Tested-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
This commit is contained in:
		
							parent
							
								
									67c777e601
								
							
						
					
					
						commit
						1e9efe6c99
					
				
					 2 changed files with 25 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -83,6 +83,29 @@ struct pci_epc *pci_epc_get(const char *epc_name)
 | 
			
		|||
}
 | 
			
		||||
EXPORT_SYMBOL_GPL(pci_epc_get);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pci_epc_get_first_free_bar() - helper to get first unreserved BAR
 | 
			
		||||
 * @epc_features: pci_epc_features structure that holds the reserved bar bitmap
 | 
			
		||||
 *
 | 
			
		||||
 * Invoke to get the first unreserved BAR that can be used for endpoint
 | 
			
		||||
 * function. For any incorrect value in reserved_bar return '0'.
 | 
			
		||||
 */
 | 
			
		||||
unsigned int pci_epc_get_first_free_bar(const struct pci_epc_features
 | 
			
		||||
					*epc_features)
 | 
			
		||||
{
 | 
			
		||||
	int free_bar;
 | 
			
		||||
 | 
			
		||||
	if (!epc_features)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	free_bar = ffz(epc_features->reserved_bar);
 | 
			
		||||
	if (free_bar > 5)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	return free_bar;
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL_GPL(pci_epc_get_first_free_bar);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * pci_epc_get_features() - get the features supported by EPC
 | 
			
		||||
 * @epc: the features supported by *this* EPC device will be returned
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -180,6 +180,8 @@ int pci_epc_start(struct pci_epc *epc);
 | 
			
		|||
void pci_epc_stop(struct pci_epc *epc);
 | 
			
		||||
const struct pci_epc_features *pci_epc_get_features(struct pci_epc *epc,
 | 
			
		||||
						    u8 func_no);
 | 
			
		||||
unsigned int pci_epc_get_first_free_bar(const struct pci_epc_features
 | 
			
		||||
					*epc_features);
 | 
			
		||||
struct pci_epc *pci_epc_get(const char *epc_name);
 | 
			
		||||
void pci_epc_put(struct pci_epc *epc);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue