hallo,
ich sitze gerade an einem Treiber, der einen flyby dma benutzt um Daten
zu transferieren. Im Treiber wird dazu ein DMA Puffer mit dma_alloc_coherent angelegt. Nachdem was ich über diese Funktion gelesen habe, wird der Funktion unter anderem die Größe des Puffers übergeben.
In dma-mapping.h ist die Funktion so deklariert
extern void* dma_alloc_coherent(struct device*, size_t, dma_addr_t*, gfp_t);
Dort ist auch zu lesen, dass die Funktion Pages alloziert. Nun ist meien Frage, ob ich als size die angeforderte Speichergröße in Bytes angeben soll oder die Anzahl der Pages die ich benötige. In einem anderen Beispiel dazu wurde die Größe in Bytes angegeben, wobei die angegebene Puffergröße im Beispiel aber kleiner als 4096Bytes beträgt, also kleiner als eine Page.
Wenn ich z.B. 5MByte als DMA-Puffer im Kernel benötige, soll ich dann als size
5242880 eintragen oder 1280 ? Denn die 5MB würden 1280 Pages a 4096 Bytes entsprechen.
In dem Treiber der mir hier vorliegt, wird für den DMA Transfer für einen Kamerasensor zuerst die benötigte Page-größe ausgerechnet.
pages = (maxwidht * maxheight * 3) / PAGE_SIZE
dma_alloc_coherent wird dann wie folgt aufgerufen
dma_alloc_coherent(NULL, (pages +1 ) * sizeof(struct dma_desc), &dma_handle, GFP_KERNEL);
Warum wird für dne Parameter size nicht die benötigte Größe in Bytes angegeben, nämlich maxwidth * maxheight * 3, sondern (pages +1 ) * sizeof(struct dma_desc) ?
Ich freue mich, wenn mich dahingehend jemand aufklären kann. Beim googlen bin ich bisher auch immer nur auf den kurzen kommentar gestoßen "size of requested dma buffer"
Grüße,
PonchoBob
ich sitze gerade an einem Treiber, der einen flyby dma benutzt um Daten
zu transferieren. Im Treiber wird dazu ein DMA Puffer mit dma_alloc_coherent angelegt. Nachdem was ich über diese Funktion gelesen habe, wird der Funktion unter anderem die Größe des Puffers übergeben.
In dma-mapping.h ist die Funktion so deklariert
extern void* dma_alloc_coherent(struct device*, size_t, dma_addr_t*, gfp_t);
Dort ist auch zu lesen, dass die Funktion Pages alloziert. Nun ist meien Frage, ob ich als size die angeforderte Speichergröße in Bytes angeben soll oder die Anzahl der Pages die ich benötige. In einem anderen Beispiel dazu wurde die Größe in Bytes angegeben, wobei die angegebene Puffergröße im Beispiel aber kleiner als 4096Bytes beträgt, also kleiner als eine Page.
Wenn ich z.B. 5MByte als DMA-Puffer im Kernel benötige, soll ich dann als size
5242880 eintragen oder 1280 ? Denn die 5MB würden 1280 Pages a 4096 Bytes entsprechen.
In dem Treiber der mir hier vorliegt, wird für den DMA Transfer für einen Kamerasensor zuerst die benötigte Page-größe ausgerechnet.
pages = (maxwidht * maxheight * 3) / PAGE_SIZE
dma_alloc_coherent wird dann wie folgt aufgerufen
dma_alloc_coherent(NULL, (pages +1 ) * sizeof(struct dma_desc), &dma_handle, GFP_KERNEL);
Warum wird für dne Parameter size nicht die benötigte Größe in Bytes angegeben, nämlich maxwidth * maxheight * 3, sondern (pages +1 ) * sizeof(struct dma_desc) ?
Ich freue mich, wenn mich dahingehend jemand aufklären kann. Beim googlen bin ich bisher auch immer nur auf den kurzen kommentar gestoßen "size of requested dma buffer"
Grüße,
PonchoBob