15ef50723SJung-uk Kim /****************************************************************************** 25ef50723SJung-uk Kim * 35ef50723SJung-uk Kim * Name: acclib.h -- C library support. Prototypes for the (optional) local 45ef50723SJung-uk Kim * implementations of required C library functions. 55ef50723SJung-uk Kim * 65ef50723SJung-uk Kim *****************************************************************************/ 75ef50723SJung-uk Kim 85ef50723SJung-uk Kim /* 9f8146b88SJung-uk Kim * Copyright (C) 2000 - 2016, Intel Corp. 105ef50723SJung-uk Kim * All rights reserved. 115ef50723SJung-uk Kim * 125ef50723SJung-uk Kim * Redistribution and use in source and binary forms, with or without 135ef50723SJung-uk Kim * modification, are permitted provided that the following conditions 145ef50723SJung-uk Kim * are met: 155ef50723SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 165ef50723SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 175ef50723SJung-uk Kim * without modification. 185ef50723SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 195ef50723SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 205ef50723SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 215ef50723SJung-uk Kim * including a substantially similar Disclaimer requirement for further 225ef50723SJung-uk Kim * binary redistribution. 235ef50723SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 245ef50723SJung-uk Kim * of any contributors may be used to endorse or promote products derived 255ef50723SJung-uk Kim * from this software without specific prior written permission. 265ef50723SJung-uk Kim * 275ef50723SJung-uk Kim * Alternatively, this software may be distributed under the terms of the 285ef50723SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 295ef50723SJung-uk Kim * Software Foundation. 305ef50723SJung-uk Kim * 315ef50723SJung-uk Kim * NO WARRANTY 325ef50723SJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 335ef50723SJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 345ef50723SJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 355ef50723SJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 365ef50723SJung-uk Kim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 375ef50723SJung-uk Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 385ef50723SJung-uk Kim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 395ef50723SJung-uk Kim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 405ef50723SJung-uk Kim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 415ef50723SJung-uk Kim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 425ef50723SJung-uk Kim * POSSIBILITY OF SUCH DAMAGES. 435ef50723SJung-uk Kim */ 445ef50723SJung-uk Kim 455ef50723SJung-uk Kim #ifndef _ACCLIB_H 465ef50723SJung-uk Kim #define _ACCLIB_H 475ef50723SJung-uk Kim 485ef50723SJung-uk Kim 495ef50723SJung-uk Kim /* 505ef50723SJung-uk Kim * Prototypes and macros for local implementations of C library functions 515ef50723SJung-uk Kim */ 525ef50723SJung-uk Kim 535ef50723SJung-uk Kim /* is* functions. The AcpiGbl_Ctypes array is defined in utclib.c */ 545ef50723SJung-uk Kim 555ef50723SJung-uk Kim extern const UINT8 AcpiGbl_Ctypes[]; 565ef50723SJung-uk Kim 575ef50723SJung-uk Kim #define _ACPI_XA 0x00 /* extra alphabetic - not supported */ 585ef50723SJung-uk Kim #define _ACPI_XS 0x40 /* extra space */ 595ef50723SJung-uk Kim #define _ACPI_BB 0x00 /* BEL, BS, etc. - not supported */ 605ef50723SJung-uk Kim #define _ACPI_CN 0x20 /* CR, FF, HT, NL, VT */ 615ef50723SJung-uk Kim #define _ACPI_DI 0x04 /* '0'-'9' */ 625ef50723SJung-uk Kim #define _ACPI_LO 0x02 /* 'a'-'z' */ 635ef50723SJung-uk Kim #define _ACPI_PU 0x10 /* punctuation */ 645ef50723SJung-uk Kim #define _ACPI_SP 0x08 /* space, tab, CR, LF, VT, FF */ 655ef50723SJung-uk Kim #define _ACPI_UP 0x01 /* 'A'-'Z' */ 665ef50723SJung-uk Kim #define _ACPI_XD 0x80 /* '0'-'9', 'A'-'F', 'a'-'f' */ 675ef50723SJung-uk Kim 685ef50723SJung-uk Kim #define isdigit(c) (AcpiGbl_Ctypes[(unsigned char)(c)] & (_ACPI_DI)) 695ef50723SJung-uk Kim #define isspace(c) (AcpiGbl_Ctypes[(unsigned char)(c)] & (_ACPI_SP)) 705ef50723SJung-uk Kim #define isxdigit(c) (AcpiGbl_Ctypes[(unsigned char)(c)] & (_ACPI_XD)) 715ef50723SJung-uk Kim #define isupper(c) (AcpiGbl_Ctypes[(unsigned char)(c)] & (_ACPI_UP)) 725ef50723SJung-uk Kim #define islower(c) (AcpiGbl_Ctypes[(unsigned char)(c)] & (_ACPI_LO)) 735ef50723SJung-uk Kim #define isprint(c) (AcpiGbl_Ctypes[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP | _ACPI_DI | _ACPI_XS | _ACPI_PU)) 745ef50723SJung-uk Kim #define isalpha(c) (AcpiGbl_Ctypes[(unsigned char)(c)] & (_ACPI_LO | _ACPI_UP)) 755ef50723SJung-uk Kim 76493deb39SJung-uk Kim /* Error code */ 77493deb39SJung-uk Kim 78493deb39SJung-uk Kim #define EPERM 1 /* Operation not permitted */ 79493deb39SJung-uk Kim #define ENOENT 2 /* No such file or directory */ 80493deb39SJung-uk Kim #define EINTR 4 /* Interrupted system call */ 81493deb39SJung-uk Kim #define EIO 5 /* I/O error */ 82493deb39SJung-uk Kim #define EBADF 9 /* Bad file number */ 83493deb39SJung-uk Kim #define EAGAIN 11 /* Try again */ 84493deb39SJung-uk Kim #define ENOMEM 12 /* Out of memory */ 85493deb39SJung-uk Kim #define EACCES 13 /* Permission denied */ 86493deb39SJung-uk Kim #define EFAULT 14 /* Bad address */ 87493deb39SJung-uk Kim #define EBUSY 16 /* Device or resource busy */ 88493deb39SJung-uk Kim #define EEXIST 17 /* File exists */ 89493deb39SJung-uk Kim #define ENODEV 19 /* No such device */ 90493deb39SJung-uk Kim #define EINVAL 22 /* Invalid argument */ 91493deb39SJung-uk Kim #define EPIPE 32 /* Broken pipe */ 92493deb39SJung-uk Kim #define ERANGE 34 /* Math result not representable */ 935ef50723SJung-uk Kim 945ef50723SJung-uk Kim /* Strings */ 955ef50723SJung-uk Kim 965ef50723SJung-uk Kim char * 975ef50723SJung-uk Kim strcat ( 985ef50723SJung-uk Kim char *DstString, 995ef50723SJung-uk Kim const char *SrcString); 1005ef50723SJung-uk Kim 1015ef50723SJung-uk Kim char * 1025ef50723SJung-uk Kim strchr ( 1035ef50723SJung-uk Kim const char *String, 1045ef50723SJung-uk Kim int ch); 1055ef50723SJung-uk Kim 1065ef50723SJung-uk Kim char * 107*28482948SJung-uk Kim strpbrk ( 108*28482948SJung-uk Kim const char *String, 109*28482948SJung-uk Kim const char *Delimiters); 110*28482948SJung-uk Kim 111*28482948SJung-uk Kim char * 112*28482948SJung-uk Kim strtok ( 113*28482948SJung-uk Kim char *String, 114*28482948SJung-uk Kim const char *Delimiters); 115*28482948SJung-uk Kim 116*28482948SJung-uk Kim char * 1175ef50723SJung-uk Kim strcpy ( 1185ef50723SJung-uk Kim char *DstString, 1195ef50723SJung-uk Kim const char *SrcString); 1205ef50723SJung-uk Kim 1215ef50723SJung-uk Kim int 1225ef50723SJung-uk Kim strcmp ( 1235ef50723SJung-uk Kim const char *String1, 1245ef50723SJung-uk Kim const char *String2); 1255ef50723SJung-uk Kim 1265ef50723SJung-uk Kim ACPI_SIZE 1275ef50723SJung-uk Kim strlen ( 1285ef50723SJung-uk Kim const char *String); 1295ef50723SJung-uk Kim 1305ef50723SJung-uk Kim char * 1315ef50723SJung-uk Kim strncat ( 1325ef50723SJung-uk Kim char *DstString, 1335ef50723SJung-uk Kim const char *SrcString, 1345ef50723SJung-uk Kim ACPI_SIZE Count); 1355ef50723SJung-uk Kim 1365ef50723SJung-uk Kim int 1375ef50723SJung-uk Kim strncmp ( 1385ef50723SJung-uk Kim const char *String1, 1395ef50723SJung-uk Kim const char *String2, 1405ef50723SJung-uk Kim ACPI_SIZE Count); 1415ef50723SJung-uk Kim 1425ef50723SJung-uk Kim char * 1435ef50723SJung-uk Kim strncpy ( 1445ef50723SJung-uk Kim char *DstString, 1455ef50723SJung-uk Kim const char *SrcString, 1465ef50723SJung-uk Kim ACPI_SIZE Count); 1475ef50723SJung-uk Kim 1485ef50723SJung-uk Kim char * 1495ef50723SJung-uk Kim strstr ( 1505ef50723SJung-uk Kim char *String1, 1515ef50723SJung-uk Kim char *String2); 1525ef50723SJung-uk Kim 1535ef50723SJung-uk Kim 1545ef50723SJung-uk Kim /* Conversion */ 1555ef50723SJung-uk Kim 1565ef50723SJung-uk Kim UINT32 1575ef50723SJung-uk Kim strtoul ( 1585ef50723SJung-uk Kim const char *String, 1595ef50723SJung-uk Kim char **Terminator, 1605ef50723SJung-uk Kim UINT32 Base); 1615ef50723SJung-uk Kim 1625ef50723SJung-uk Kim 1635ef50723SJung-uk Kim /* Memory */ 1645ef50723SJung-uk Kim 1655ef50723SJung-uk Kim int 1665ef50723SJung-uk Kim memcmp ( 1675ef50723SJung-uk Kim void *Buffer1, 1685ef50723SJung-uk Kim void *Buffer2, 1695ef50723SJung-uk Kim ACPI_SIZE Count); 1705ef50723SJung-uk Kim 1715ef50723SJung-uk Kim void * 1725ef50723SJung-uk Kim memcpy ( 1735ef50723SJung-uk Kim void *Dest, 1745ef50723SJung-uk Kim const void *Src, 1755ef50723SJung-uk Kim ACPI_SIZE Count); 1765ef50723SJung-uk Kim 1775ef50723SJung-uk Kim void * 178*28482948SJung-uk Kim memmove ( 179*28482948SJung-uk Kim void *Dest, 180*28482948SJung-uk Kim const void *Src, 181*28482948SJung-uk Kim ACPI_SIZE Count); 182*28482948SJung-uk Kim 183*28482948SJung-uk Kim void * 1845ef50723SJung-uk Kim memset ( 1855ef50723SJung-uk Kim void *Dest, 1865ef50723SJung-uk Kim int Value, 1875ef50723SJung-uk Kim ACPI_SIZE Count); 1885ef50723SJung-uk Kim 1895ef50723SJung-uk Kim 1905ef50723SJung-uk Kim /* upper/lower case */ 1915ef50723SJung-uk Kim 1925ef50723SJung-uk Kim int 1935ef50723SJung-uk Kim tolower ( 1945ef50723SJung-uk Kim int c); 1955ef50723SJung-uk Kim 1965ef50723SJung-uk Kim int 1975ef50723SJung-uk Kim toupper ( 1985ef50723SJung-uk Kim int c); 1995ef50723SJung-uk Kim 200493deb39SJung-uk Kim /* 201493deb39SJung-uk Kim * utprint - printf/vprintf output functions 202493deb39SJung-uk Kim */ 203493deb39SJung-uk Kim const char * 204493deb39SJung-uk Kim AcpiUtScanNumber ( 205493deb39SJung-uk Kim const char *String, 206493deb39SJung-uk Kim UINT64 *NumberPtr); 207493deb39SJung-uk Kim 208493deb39SJung-uk Kim const char * 209493deb39SJung-uk Kim AcpiUtPrintNumber ( 210493deb39SJung-uk Kim char *String, 211493deb39SJung-uk Kim UINT64 Number); 212493deb39SJung-uk Kim 213493deb39SJung-uk Kim int 214493deb39SJung-uk Kim vsnprintf ( 215493deb39SJung-uk Kim char *String, 216493deb39SJung-uk Kim ACPI_SIZE Size, 217493deb39SJung-uk Kim const char *Format, 218493deb39SJung-uk Kim va_list Args); 219493deb39SJung-uk Kim 220493deb39SJung-uk Kim int 221493deb39SJung-uk Kim snprintf ( 222493deb39SJung-uk Kim char *String, 223493deb39SJung-uk Kim ACPI_SIZE Size, 224493deb39SJung-uk Kim const char *Format, 225493deb39SJung-uk Kim ...); 226493deb39SJung-uk Kim 227493deb39SJung-uk Kim int 228493deb39SJung-uk Kim sprintf ( 229493deb39SJung-uk Kim char *String, 230493deb39SJung-uk Kim const char *Format, 231493deb39SJung-uk Kim ...); 232493deb39SJung-uk Kim 233493deb39SJung-uk Kim #ifdef ACPI_APPLICATION 234493deb39SJung-uk Kim #define SEEK_SET 0 235493deb39SJung-uk Kim #define SEEK_CUR 1 236493deb39SJung-uk Kim #define SEEK_END 2 237493deb39SJung-uk Kim 238493deb39SJung-uk Kim /* 239493deb39SJung-uk Kim * NOTE: Currently we only need to update errno for file IOs. Other 240493deb39SJung-uk Kim * Clibrary invocations in ACPICA do not make descisions according to 241493deb39SJung-uk Kim * the errno. 242493deb39SJung-uk Kim */ 243493deb39SJung-uk Kim extern int errno; 244493deb39SJung-uk Kim 245*28482948SJung-uk Kim #ifndef EOF 246*28482948SJung-uk Kim #define EOF (-1) 247*28482948SJung-uk Kim #endif 248*28482948SJung-uk Kim 249*28482948SJung-uk Kim #define putchar(c) fputc(stdout, c) 250*28482948SJung-uk Kim #define getchar(c) fgetc(stdin) 251*28482948SJung-uk Kim 252493deb39SJung-uk Kim int 253493deb39SJung-uk Kim vprintf ( 254493deb39SJung-uk Kim const char *Format, 255493deb39SJung-uk Kim va_list Args); 256493deb39SJung-uk Kim 257493deb39SJung-uk Kim int 258493deb39SJung-uk Kim printf ( 259493deb39SJung-uk Kim const char *Format, 260493deb39SJung-uk Kim ...); 261493deb39SJung-uk Kim 262493deb39SJung-uk Kim int 263493deb39SJung-uk Kim vfprintf ( 264493deb39SJung-uk Kim FILE *File, 265493deb39SJung-uk Kim const char *Format, 266493deb39SJung-uk Kim va_list Args); 267493deb39SJung-uk Kim 268493deb39SJung-uk Kim int 269493deb39SJung-uk Kim fprintf ( 270493deb39SJung-uk Kim FILE *File, 271493deb39SJung-uk Kim const char *Format, 272493deb39SJung-uk Kim ...); 273493deb39SJung-uk Kim 274493deb39SJung-uk Kim FILE * 275493deb39SJung-uk Kim fopen ( 276493deb39SJung-uk Kim const char *Path, 277493deb39SJung-uk Kim const char *Modes); 278493deb39SJung-uk Kim 279493deb39SJung-uk Kim void 280493deb39SJung-uk Kim fclose ( 281493deb39SJung-uk Kim FILE *File); 282493deb39SJung-uk Kim 283493deb39SJung-uk Kim int 284493deb39SJung-uk Kim fread ( 285493deb39SJung-uk Kim void *Buffer, 286493deb39SJung-uk Kim ACPI_SIZE Size, 287493deb39SJung-uk Kim ACPI_SIZE Count, 288493deb39SJung-uk Kim FILE *File); 289493deb39SJung-uk Kim 290493deb39SJung-uk Kim int 291493deb39SJung-uk Kim fwrite ( 292493deb39SJung-uk Kim void *Buffer, 293493deb39SJung-uk Kim ACPI_SIZE Size, 294493deb39SJung-uk Kim ACPI_SIZE Count, 295493deb39SJung-uk Kim FILE *File); 296493deb39SJung-uk Kim 297493deb39SJung-uk Kim int 298493deb39SJung-uk Kim fseek ( 299493deb39SJung-uk Kim FILE *File, 300493deb39SJung-uk Kim long Offset, 301493deb39SJung-uk Kim int From); 302493deb39SJung-uk Kim 303493deb39SJung-uk Kim long 304493deb39SJung-uk Kim ftell ( 305493deb39SJung-uk Kim FILE *File); 306*28482948SJung-uk Kim 307*28482948SJung-uk Kim int 308*28482948SJung-uk Kim fgetc ( 309*28482948SJung-uk Kim FILE *File); 310*28482948SJung-uk Kim 311*28482948SJung-uk Kim int 312*28482948SJung-uk Kim fputc ( 313*28482948SJung-uk Kim FILE *File, 314*28482948SJung-uk Kim char c); 315*28482948SJung-uk Kim 316*28482948SJung-uk Kim char * 317*28482948SJung-uk Kim fgets ( 318*28482948SJung-uk Kim char *s, 319*28482948SJung-uk Kim ACPI_SIZE Size, 320*28482948SJung-uk Kim FILE *File); 321493deb39SJung-uk Kim #endif 322493deb39SJung-uk Kim 3235ef50723SJung-uk Kim #endif /* _ACCLIB_H */ 324