diff options
author | Miguel de Icaza <miguel@nuclecu.unam.mx> | 1997-09-21 22:25:36 +0000 |
---|---|---|
committer | Miguel de Icaza <miguel@nuclecu.unam.mx> | 1997-09-21 22:25:36 +0000 |
commit | 2e36d7a74ec75c24009475b788a3f9bf94f63b4d (patch) | |
tree | 36912caedc69b4bfb24c75911d630ae07343ebf1 /arch/mips/kernel/irixinv.c | |
parent | 10c27d19025cb3257d9131d0a07b7f77cf9aff59 (diff) |
IRIX inventory support. Right now it has hardcoded my machine's
information. This needs to be fixed at least to report the proper
graphics capabilities on the machine. Optimally, we should scatter
the right calls to the inventory all over the kernel source.
Diffstat (limited to 'arch/mips/kernel/irixinv.c')
-rw-r--r-- | arch/mips/kernel/irixinv.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/arch/mips/kernel/irixinv.c b/arch/mips/kernel/irixinv.c new file mode 100644 index 000000000..22c90047c --- /dev/null +++ b/arch/mips/kernel/irixinv.c @@ -0,0 +1,80 @@ +/* + * Support the inventory interface for IRIX binaries + * This is invoked before the mm layer is working, so we do not + * use the linked lists for the inventory yet. + * + * Miguel de Icaza, 1997. + */ +#include <linux/config.h> +#include <linux/mm.h> +#include <linux/slab.h> +#include <asm/uaccess.h> +#include <asm/inventory.h> + +#define MAX_INVENTORY 50 +int inventory_items = 0; + +static inventory_t inventory [MAX_INVENTORY]; + +void +add_to_inventory (int class, int type, int controller, int unit, int state) +{ + inventory_t *ni = &inventory [inventory_items]; + + if (inventory_items == MAX_INVENTORY) + return; + + ni->inv_class = class; + ni->inv_type = type; + ni->inv_controller = controller; + ni->inv_unit = unit; + ni->inv_state = state; + ni->inv_next = ni; + inventory_items++; +} + +int +dump_inventory_to_user (void *userbuf, int size) +{ + inventory_t *inv = &inventory [0]; + inventory_t *user = userbuf; + int v; + + if ((v = verify_area (VERIFY_WRITE, userbuf, size))) + return v; + + for (v = 0; v < inventory_items; v++){ + inv = &inventory [v]; + copy_to_user (user, inv, sizeof (inventory_t)); + user++; + } + return inventory_items * sizeof (inventory_t); +} + +void +init_inventory (void) +{ + /* gross hack while we put the right bits all over the kernel + * most likely this will not let just anyone run the X server + * until we put the right values all over the place + */ + + add_to_inventory (10, 3, 0, 0, 16400); + add_to_inventory (1, 1, 150, -1, 12); + add_to_inventory (1, 3, 0, 0, 8976); + add_to_inventory (1, 2, 0, 0, 8976); + add_to_inventory (4, 8, 0, 0, 2); + add_to_inventory (5, 5, 0, 0, 1); + add_to_inventory (3, 3, 0, 0, 32768); + add_to_inventory (3, 4, 0, 0, 32768); + add_to_inventory (3, 8, 0, 0, 524288); + add_to_inventory (3, 9, 0, 0, 64); + add_to_inventory (3, 1, 0, 0, 67108864); + add_to_inventory (12, 3, 0, 0, 16); + add_to_inventory (8, 7, 17, 0, 16777472); + add_to_inventory (8, 0, 0, 0, 1); + add_to_inventory (2, 1, 0, 13, 2); + add_to_inventory (2, 2, 0, 2, 0); + add_to_inventory (2, 2, 0, 1, 0); + add_to_inventory (7, 14, 0, 0, 6); +} |