platform_get_resource()
jest używana w funkcji __init
z kierowcą, aby uzyskać informacje na temat struktury zasobu urządzenia, takie jak adres początkowy i adres końcowy, aby wybrać rozmiar pamięci zasobów, aby można było mapować go w pamięci.
deklaracja platform_get_resource
funkcji jest następująca
struct resource * platform_get_resource ( struct platform_device * dev,
unsigned int type,
unsigned int num);
Pierwszy parametr informuje funkcji, które urządzenie jesteśmy zainteresowani, więc można go wyodrębnić potrzebujemy informacji.
Drugi parametr zależy od rodzaju obsługiwanego zasobu. Jeśli jest to pamięć (lub cokolwiek, co można zmapować jako pamięć :-)), to jest to IORESOURCE_MEM. Można zobaczyć wszystkie makra w include/linux/ioport.h
Dla ostatniego parametru http://lwn.net/Articles/448499/ mówi:
Ostatni parametr, który mówi, pożądane jest źródłem tego typu, z zerowym wskazaniem pierwszego. Tak więc, na przykład, kierowca mógł znaleźć swojego regionu sekund MMIO z:
r = platform_get_resource(pdev, IORESOURCE_MEM, 1);
Wartością zwracaną jest wskaźnik do typu struct resource
var.
Oto przykład
unsigned long *base_addr; /* Virtual Base Address */
struct resource *res; /* Device Resource Structure */
unsigned long remap_size; /* Device Memory Size */
static int __devinit bram_io_probe(struct platform_device *pdev)
{
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); // get resource info
remap_size = res->end - res->start + 1; // get resource memory size
base_addr = ioremap(res->start, remap_size); // map it
}