summaryrefslogtreecommitdiff
path: root/sbin/config_slot/read_conf.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/config_slot/read_conf.c')
-rw-r--r--sbin/config_slot/read_conf.c290
1 files changed, 0 insertions, 290 deletions
diff --git a/sbin/config_slot/read_conf.c b/sbin/config_slot/read_conf.c
deleted file mode 100644
index 333b93ac097..00000000000
--- a/sbin/config_slot/read_conf.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/* $OpenBSD: read_conf.c,v 1.2 1996/06/23 14:30:03 deraadt Exp $ */
-
-/*
- * Copyright (c) 1993, 1994 Stefan Grefen. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following dipclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Stefan Grefen.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-/* With 'help' of Barry Jaspan's code */
-
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/file.h>
-#include <sys/ioctl.h>
-#include <sys/device.h>
-
-#include <dev/pcmcia/pcmcia.h>
-#include <dev/pcmcia/pcmciabus.h>
-#include <dev/pcmcia/pcmcia_ioctl.h>
-
-read_conf(u_char *buf, int blen,int cfidx,struct pcmcia_conf *pc_cf)
-{
- u_char code, len,*tbuf,*endp=buf+blen;
- int done;
-
- done = 0;
- while (!done && buf<endp) {
- code=*buf++;
- if (code == CIS_NULL) {
- continue;
- }
-
- len=*buf++;
-
- tbuf=buf;
- buf+=len;
- switch (code) {
- case CIS_END:
- done = 1;
- break;
- case CIS_CFG_INFO:
- read_cfg_info(tbuf, len, pc_cf);
- break;
- case CIS_CFG_ENT:
- parse_cfent(tbuf, len,cfidx, pc_cf);
- break;
- default:
- break;
- }
- }
- return 0;
-}
-
-read_cfg_info(u_char *tbuf, int len, struct pcmcia_conf *pc_cf)
-{
- int i, rasz, rmsz;
-
- i = 0;
- rasz = (tbuf[i] & TPCC_RASZ) >> TPCC_RASZ_SHIFT;
- rmsz = (tbuf[i] & TPCC_RMSZ) >> TPCC_RMSZ_SHIFT;
-
- i+=2;
- pc_cf->cfg_off = 0;
- switch (rasz) {
- case 3:
- pc_cf->cfg_off |= (tbuf[i+3] << 24);
- case 2:
- pc_cf->cfg_off |= (tbuf[i+2] << 16);
- case 1:
- pc_cf->cfg_off |= (tbuf[i+1] << 8);
- case 0:
- pc_cf->cfg_off |= tbuf[i];
- }
- i+=rasz;
- pc_cf->cfg_regmask = 0;
- switch (rmsz) {
- default:
- case 3:
- pc_cf->cfg_regmask |= (tbuf[i+3] << 24);
- case 2:
- pc_cf->cfg_regmask |= (tbuf[i+2] << 16);
- case 1:
- pc_cf->cfg_regmask |= (tbuf[i+1] << 8);
- case 0:
- pc_cf->cfg_regmask |= tbuf[i];
- }
-
-}
-
-parse_cfent(u_char *tbuf, int len,int slotid, struct pcmcia_conf *pc_cf)
-{
- int i, idx,defp,iop,io_16,ios,ftrs,intface,k;
- int host_addr_p, addr_size, len_size;
-
- i = 0;
- intface = (tbuf[i] & TPCE_INDX_INT);
- idx = (tbuf[i] & TPCE_INDX_ENTRY);
- defp = (tbuf[i] & TPCE_INDX_DEF);
- printf("%x %x\n",idx,slotid);
- if((idx==slotid) ||(defp && slotid==-1)) {
- int j;
- printf("** %x %x\n",idx,slotid);
- if (intface) {
- i++;
- pc_cf->iocard=(tbuf[i] & TPCE_IF_TYPE)==1;
- }
-
- i++;
- ftrs = tbuf[i++];
- for (j = 0; j < (ftrs & TPCE_FS_PWR); j++) {
- int pwr_desc = tbuf[i++];
- /* for each struct, skip all parameter defns */
- for (k = 0; k < 8; pwr_desc >>= 1, k++) {
- if (pwr_desc & 0x01) {
- /* skip bytes until non-ext found */
- while (tbuf[i++] & 0x80)
- ;
- }
- }
- }
-
- if (ftrs & TPCE_FS_TD) {
- i++;
- }
-
- if (ftrs & TPCE_FS_IO) {
- int io_addrs[16],io_lens[16];
- int io_16,io_block_len, io_block_size;
- iop = 1;
- io_16 = tbuf[i] & TPCE_FS_IO_BUS16;
- i++;
- ios--; /*TMPFIX*/;
- io_block_len = (tbuf[i] & TPCE_FS_IO_LEN) >>
- TPCE_FS_IO_LEN_SHIFT;
- io_block_size = (tbuf[i] & TPCE_FS_IO_SIZE) >>
- TPCE_FS_IO_SIZE_SHIFT;
- ios = (tbuf[i] & TPCE_FS_IO_NUM) + 1;
- i++;
- for (j = 0; j < ios; j++) {
- io_addrs[j] = io_lens[j] = 0;
- switch (io_block_size) {
- case 3:
- io_addrs[j] |= tbuf[i+3] << 24;
- io_addrs[j] |= tbuf[i+2] << 16;
- case 2:
- io_addrs[j] |= tbuf[i+1] << 8;
- case 1:
- io_addrs[j] |= tbuf[i];
- break;
- }
- pc_cf->io[j].start=io_addrs[j];
- i += io_block_size + (io_block_size == 3 ? 1
- : 0);
- switch (io_block_len) {
- case 3:
- io_lens[j] |= tbuf[i+3] << 24;
- io_lens[j] |= tbuf[i+2] << 16;
- case 2:
- io_lens[j] |= tbuf[i+1] << 8;
- case 1:
- io_lens[j] |= tbuf[i];
- break;
- }
- /* io_lens[j]++; /*TMPFIX*/;
- pc_cf->io[j].len=io_lens[j];
- pc_cf->io[j].flags=io_16?PCMCIA_MAP_16:PCMCIA_MAP_8;
- i += io_block_len + (io_block_len == 3 ? 1
- : 0);
-
- }
- pc_cf->iowin=ios;
- }
-
- if (ftrs & TPCE_FS_IRQ) {
- int irq_mask,irqp,irq;
- pc_cf->irq_level=!!(tbuf[i] & TPCE_FS_IRQ_LEVEL);
- pc_cf->irq_pulse=!!(tbuf[i] & TPCE_FS_IRQ_PULSE);
- pc_cf->irq_share=!!(tbuf[i] & TPCE_FS_IRQ_SHARE);
- if (tbuf[i] & TPCE_FS_IRQ_MASK) {
- irq_mask = (tbuf[i+2] << 8) + tbuf[i+1];
- i += 2;
- } else {
- pc_cf->irq_num = tbuf[i] & TPCE_FS_IRQ_IRQN;
- }
-
- i++;
- }
-
- if (ftrs & TPCE_FS_MEM) {
- int memp,mems,mem_lens[16],mem_caddrs[16],mem_haddrs[16];
- memp = 1;
- switch ((ftrs & TPCE_FS_MEM) >> TPCE_FS_MEM_SHIFT) {
- case 1:
- mems = 1;
- mem_lens[0] = (tbuf[i+1] << 8) + tbuf[i];
- mem_lens[0] <<= 8;
- printf("\tmem: len %d\n", mem_lens[0]);
-
- break;
- case 2:
- mems = 1;
- mem_lens[0] = (tbuf[i+1] << 8) + tbuf[i];
- mem_caddrs[0] = mem_haddrs[0] =
- (tbuf[i+3] << 8) + tbuf[i+2];
-
- mem_lens[0] <<= 8;
- mem_caddrs[0] <<= 8;
-
- break;
- case 3:
- host_addr_p = tbuf[i] & TPCE_FS_MEM_HOST;
- addr_size = (tbuf[i] & TPCE_FS_MEM_ADDR) >>
- TPCE_FS_MEM_ADDR_SHIFT;
- len_size = (tbuf[i] & TPCE_FS_MEM_LEN) >>
- TPCE_FS_MEM_LEN_SHIFT;
- mems = (tbuf[i] & TPCE_FS_MEM_WINS) + 1;
- i++;
- for (j = 0; j < mems; j++) {
- mem_lens[j] = 0;
- mem_caddrs[j] = 0;
- mem_haddrs[j] = 0;
- switch (len_size) {
- case 3:
- mem_lens[j] |= (tbuf[i+2] << 16);
- case 2:
- mem_lens[j] |= (tbuf[i+1] << 8);
- case 1:
- mem_lens[j] |= tbuf[i];
- }
- i += len_size;
- switch (addr_size) {
- case 3:
- mem_caddrs[j] |= (tbuf[i+2] << 16);
- case 2:
- mem_caddrs[j] |= (tbuf[i+1] << 8);
- case 1:
- mem_caddrs[j] |= tbuf[i];
- }
- i += addr_size;
- if (host_addr_p) {
- switch (addr_size) {
- case 3:
- mem_haddrs[j] |=
- (tbuf[i+2] << 16);
- case 2:
- mem_haddrs[j] |=
- (tbuf[i+1] << 8);
- case 1:
- mem_haddrs[j] |=
- tbuf[i];
- }
- i += addr_size;
- }
-
- mem_lens[j] <<= 8;
- mem_caddrs[j] <<= 8;
- mem_haddrs[j] <<= 8;
-
- }
- }
- }
- }
-}
-
-
-
-