Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Merge branch 'devel'
[palacios.git] / kitten / include / lwk / resource.h
1 /**
2  * Derived from Linux include/linux/ioport.h. 
3  * Original comment at head of ioport.h:
4  *
5  * ioport.h     Definitions of routines for detecting, reserving and
6  *              allocating system resources.
7  *
8  * Authors:     Linus Torvalds
9  */
10
11 #ifndef _LWK_RESOURCE_H
12 #define _LWK_RESOURCE_H
13
14 /**
15  * Resources are tree-like, allowing
16  * nesting etc..
17  */
18 struct resource {
19         const char *name;
20         unsigned long start, end;
21         unsigned long flags;
22         struct resource *parent, *sibling, *child;
23 };
24
25 /**
26  * PC/ISA/whatever - the normal PC address spaces: IO and memory
27  */
28 extern struct resource ioport_resource;
29 extern struct resource iomem_resource;
30
31 /**
32  * IO resources have these defined flags.
33  */
34 #define IORESOURCE_BITS         0x000000ff      /* Bus-specific bits */
35
36 #define IORESOURCE_IO           0x00000100      /* Resource type */
37 #define IORESOURCE_MEM          0x00000200
38 #define IORESOURCE_IRQ          0x00000400
39 #define IORESOURCE_DMA          0x00000800
40
41 #define IORESOURCE_PREFETCH     0x00001000      /* No side effects */
42 #define IORESOURCE_READONLY     0x00002000
43 #define IORESOURCE_CACHEABLE    0x00004000
44 #define IORESOURCE_RANGELENGTH  0x00008000
45 #define IORESOURCE_SHADOWABLE   0x00010000
46 #define IORESOURCE_BUS_HAS_VGA  0x00080000
47
48 #define IORESOURCE_DISABLED     0x10000000
49 #define IORESOURCE_UNSET        0x20000000
50 #define IORESOURCE_AUTO         0x40000000
51 #define IORESOURCE_BUSY         0x80000000      /* Driver has marked this resource busy */
52
53 /* ISA PnP IRQ specific bits (IORESOURCE_BITS) */
54 #define IORESOURCE_IRQ_HIGHEDGE         (1<<0)
55 #define IORESOURCE_IRQ_LOWEDGE          (1<<1)
56 #define IORESOURCE_IRQ_HIGHLEVEL        (1<<2)
57 #define IORESOURCE_IRQ_LOWLEVEL         (1<<3)
58
59 /* ISA PnP DMA specific bits (IORESOURCE_BITS) */
60 #define IORESOURCE_DMA_TYPE_MASK        (3<<0)
61 #define IORESOURCE_DMA_8BIT             (0<<0)
62 #define IORESOURCE_DMA_8AND16BIT        (1<<0)
63 #define IORESOURCE_DMA_16BIT            (2<<0)
64
65 #define IORESOURCE_DMA_MASTER           (1<<2)
66 #define IORESOURCE_DMA_BYTE             (1<<3)
67 #define IORESOURCE_DMA_WORD             (1<<4)
68
69 #define IORESOURCE_DMA_SPEED_MASK       (3<<6)
70 #define IORESOURCE_DMA_COMPATIBLE       (0<<6)
71 #define IORESOURCE_DMA_TYPEA            (1<<6)
72 #define IORESOURCE_DMA_TYPEB            (2<<6)
73 #define IORESOURCE_DMA_TYPEF            (3<<6)
74
75 /* ISA PnP memory I/O specific bits (IORESOURCE_BITS) */
76 #define IORESOURCE_MEM_WRITEABLE        (1<<0)  /* dup: IORESOURCE_READONLY */
77 #define IORESOURCE_MEM_CACHEABLE        (1<<1)  /* dup: IORESOURCE_CACHEABLE */
78 #define IORESOURCE_MEM_RANGELENGTH      (1<<2)  /* dup: IORESOURCE_RANGELENGTH */
79 #define IORESOURCE_MEM_TYPE_MASK        (3<<3)
80 #define IORESOURCE_MEM_8BIT             (0<<3)
81 #define IORESOURCE_MEM_16BIT            (1<<3)
82 #define IORESOURCE_MEM_8AND16BIT        (2<<3)
83 #define IORESOURCE_MEM_32BIT            (3<<3)
84 #define IORESOURCE_MEM_SHADOWABLE       (1<<5)  /* dup: IORESOURCE_SHADOWABLE */
85 #define IORESOURCE_MEM_EXPANSIONROM     (1<<6)
86
87 /* PCI ROM control bits (IORESOURCE_BITS) */
88 #define IORESOURCE_ROM_ENABLE           (1<<0)  /* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */
89 #define IORESOURCE_ROM_SHADOW           (1<<1)  /* ROM is copy at C000:0 */
90 #define IORESOURCE_ROM_COPY             (1<<2)  /* ROM is alloc'd copy, resource field overlaid */
91
92 extern int request_resource(struct resource *root, struct resource *new);
93 extern struct resource * ____request_resource(struct resource *root, struct resource *new);
94 extern int release_resource(struct resource *new);
95 extern int insert_resource(struct resource *parent, struct resource *new);
96 extern int allocate_resource(struct resource *root, struct resource *new,
97                              unsigned long size,
98                              unsigned long min, unsigned long max,
99                              unsigned long align,
100                              void (*alignf)(void *, struct resource *,
101                                             unsigned long, unsigned long),
102                              void *alignf_data);
103 extern int adjust_resource(struct resource *res, unsigned long start,
104                            unsigned long size);
105
106 #endif