summaryrefslogtreecommitdiff
path: root/linux-core/drm_agpsupport.c
AgeCommit message (Expand)Author
2004-02-28More differentiated error codes for DRM(agp_acquire)Michel Daenzer
2003-08-15Merge from 2.6 kernel (Linus Torvalds)Michel Daenzer
2003-07-25Compile fixes for recent 2.5/2.6 Linux kernels. I hope this doesn't breakMichel Daenzer
2003-07-25Fail in DRM(agp_acquire) if the AGP aperture can't be used, such that the XMichel Daenzer
2003-07-09DA: fix for bug 484 in Bugzilla, originally from me, reworked by DavidDave Airlie
2003-06-19Revert the janitorial - that works is now on the new branchJose Fonseca
2003-06-03Split declarations/definitions in drm_scatter.h into drm_sg.h/drm_sg_tmp.hJose Fonseca
2003-05-27Merged DRM documentation.Jose Fonseca
2003-04-17Bring some drm module changes over from the XFree86 trunk:David Dawes
2003-03-25linux merge for drmAlan Hourihane
2002-12-11remove agpgart informationalKeith Whitwell
2002-08-22Don't (re)define vmalloc_to_page for kernel >= 2.4.19, as it has beenLeif Delgass
2001-12-10merge with linux kernel 2.4.15Alan Hourihane
2001-09-25merge with 2.4.10 kernelAlan Hourihane
2001-08-19No one's maintaining 2.2.x support - so remove all the cruft.Alan Hourihane
2001-08-08Update to the code I sent Linus and Alan this morning. Added some missingJeff Hartmann
2001-05-01Import of XFree86 4.0.99.3David Dawes
2001-04-09Import -f XFree86 4.0.99.2David Dawes
2001-04-05Merged ati-pcigart-1-0-0Kevin E Martin
2001-03-04Don't try and setup the MTRR for AGP when AGP not available. CheckAlan Hourihane
2001-02-15Merge mga-1-0-0-branch into trunk.Gareth Hughes
notice (including the * next paragraph) shall be included in all copies or substantial portions * of the Software. * */ /** * \file * List macros heavily inspired by the Linux kernel * list handling. No list looping yet. * * Is not threadsafe, so common operations need to * be protected using an external mutex. */ #ifndef _U_DOUBLE_LIST_H_ #define _U_DOUBLE_LIST_H_ #include <stddef.h> struct list_head { struct list_head *prev; struct list_head *next; }; static void list_inithead(struct list_head *item) { item->prev = item; item->next = item; } static void list_add(struct list_head *item, struct list_head *list) { item->prev = list; item->next = list->next; list->next->prev = item; list->next = item; } static void list_addtail(struct list_head *item, struct list_head *list) { item->next = list; item->prev = list->prev; list->prev->next = item; list->prev = item; } static void list_replace(struct list_head *from, struct list_head *to) { to->prev = from->prev; to->next = from->next; from->next->prev = to; from->prev->next = to; } static void list_del(struct list_head *item) { item->prev->next = item->next; item->next->prev = item->prev; } static void list_delinit(struct list_head *item) { item->prev->next = item->next; item->next->prev = item->prev; item->next = item; item->prev = item; } #define LIST_INITHEAD(__item) list_inithead(__item) #define LIST_ADD(__item, __list) list_add(__item, __list) #define LIST_ADDTAIL(__item, __list) list_addtail(__item, __list) #define LIST_REPLACE(__from, __to) list_replace(__from, __to) #define LIST_DEL(__item) list_del(__item) #define LIST_DELINIT(__item) list_delinit(__item) #define LIST_ENTRY(__type, __item, __field) \ ((__type *)(((char *)(__item)) - offsetof(__type, __field))) #define LIST_IS_EMPTY(__list) \ ((__list)->next == (__list)) #ifndef container_of #define container_of(ptr, sample, member) \ (void *)((char *)(ptr) \ - ((char *)&(sample)->member - (char *)(sample))) #endif #define LIST_FOR_EACH_ENTRY(pos, head, member) \ for (pos = container_of((head)->next, pos, member); \ &pos->member != (head); \ pos = container_of(pos->member.next, pos, member)) #define LIST_FOR_EACH_ENTRY_SAFE(pos, storage, head, member) \ for (pos = container_of((head)->next, pos, member), \ storage = container_of(pos->member.next, pos, member); \ &pos->member != (head); \ pos = storage, storage = container_of(storage->member.next, storage, member)) #define LIST_FOR_EACH_ENTRY_SAFE_REV(pos, storage, head, member) \ for (pos = container_of((head)->prev, pos, member), \ storage = container_of(pos->member.prev, pos, member); \ &pos->member != (head); \ pos = storage, storage = container_of(storage->member.prev, storage, member)) #define LIST_FOR_EACH_ENTRY_FROM(pos, start, head, member) \ for (pos = container_of((start), pos, member); \ &pos->member != (head); \ pos = container_of(pos->member.next, pos, member)) #define LIST_FOR_EACH_ENTRY_FROM_REV(pos, start, head, member) \ for (pos = container_of((start), pos, member); \ &pos->member != (head); \ pos = container_of(pos->member.prev, pos, member)) #endif /*_U_DOUBLE_LIST_H_*/