sgi_if.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* $Id$
  2.  *
  3.  * This file is subject to the terms and conditions of the GNU General Public
  4.  * License.  See the file "COPYING" in the main directory of this archive
  5.  * for more details.
  6.  *
  7.  * Copyright (C) 1992 - 1997, 2000 Silicon Graphics, Inc.
  8.  * Copyright (C) 2000 by Colin Ngam
  9.  */
  10. #include <linux/types.h>
  11. #include <linux/ctype.h>
  12. #include <linux/mm.h>
  13. #include <linux/slab.h>
  14. #include <asm/sn/sgi.h>
  15. #include <asm/sn/invent.h>
  16. #include <asm/sn/hcl.h>
  17. #include <asm/sn/labelcl.h>
  18. #include <asm/sn/pci/bridge.h>
  19. #include <asm/sn/ioerror_handling.h>
  20. #include <asm/sn/pci/pciio.h>
  21. #include <asm/sn/slotnum.h>
  22. void *
  23. kmem_zalloc(size_t size, int flag)
  24. {
  25.         void *ptr = kmalloc(size, GFP_KERNEL);
  26.         BZERO(ptr, size);
  27.         return ptr;
  28. }
  29. #define xtod(c)         ((c) <= '9' ? '0' - (c) : 'a' - (c) - 10)
  30. long
  31. atoi(register char *p)
  32. {
  33.         register long n;
  34.         register int c, neg = 0;
  35.         if (p == NULL)
  36.                 return 0;
  37.         if (!isdigit(c = *p)) {
  38.                 while (isspace(c))
  39.                         c = *++p;
  40.                 switch (c) {
  41.                 case '-':
  42.                         neg++;
  43.                 case '+': /* fall-through */
  44.                         c = *++p;
  45.                 }
  46.                 if (!isdigit(c))
  47.                         return (0);
  48.         }
  49.         if (c == '0' && *(p + 1) == 'x') {
  50.                 p += 2;
  51.                 c = *p;
  52.                 n = xtod(c);
  53.                 while ((c = *++p) && isxdigit(c)) {
  54.                         n *= 16; /* two steps to avoid unnecessary overflow */
  55.                         n += xtod(c); /* accum neg to avoid surprises at MAX */
  56.                 }
  57.         } else {
  58.                 n = '0' - c;
  59.                 while ((c = *++p) && isdigit(c)) {
  60.                         n *= 10; /* two steps to avoid unnecessary overflow */
  61.                         n += '0' - c; /* accum neg to avoid surprises at MAX */
  62.                 }
  63.         }
  64.         return (neg ? n : -n);
  65. }