xref: /freebsd/sys/contrib/dev/acpica/include/acclib.h (revision 493deb390baef09f40125589cbdb714cb274ab04)
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 
76*493deb39SJung-uk Kim /* Error code */
77*493deb39SJung-uk Kim 
78*493deb39SJung-uk Kim #define EPERM            1 /* Operation not permitted */
79*493deb39SJung-uk Kim #define ENOENT           2 /* No such file or directory */
80*493deb39SJung-uk Kim #define EINTR            4 /* Interrupted system call */
81*493deb39SJung-uk Kim #define EIO              5 /* I/O error */
82*493deb39SJung-uk Kim #define EBADF            9 /* Bad file number */
83*493deb39SJung-uk Kim #define EAGAIN          11 /* Try again */
84*493deb39SJung-uk Kim #define ENOMEM          12 /* Out of memory */
85*493deb39SJung-uk Kim #define EACCES          13 /* Permission denied */
86*493deb39SJung-uk Kim #define EFAULT          14 /* Bad address */
87*493deb39SJung-uk Kim #define EBUSY           16 /* Device or resource busy */
88*493deb39SJung-uk Kim #define EEXIST          17 /* File exists */
89*493deb39SJung-uk Kim #define ENODEV          19 /* No such device */
90*493deb39SJung-uk Kim #define EINVAL          22 /* Invalid argument */
91*493deb39SJung-uk Kim #define EPIPE           32 /* Broken pipe */
92*493deb39SJung-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 *
1075ef50723SJung-uk Kim strcpy (
1085ef50723SJung-uk Kim     char                    *DstString,
1095ef50723SJung-uk Kim     const char              *SrcString);
1105ef50723SJung-uk Kim 
1115ef50723SJung-uk Kim int
1125ef50723SJung-uk Kim strcmp (
1135ef50723SJung-uk Kim     const char              *String1,
1145ef50723SJung-uk Kim     const char              *String2);
1155ef50723SJung-uk Kim 
1165ef50723SJung-uk Kim ACPI_SIZE
1175ef50723SJung-uk Kim strlen (
1185ef50723SJung-uk Kim     const char              *String);
1195ef50723SJung-uk Kim 
1205ef50723SJung-uk Kim char *
1215ef50723SJung-uk Kim strncat (
1225ef50723SJung-uk Kim     char                    *DstString,
1235ef50723SJung-uk Kim     const char              *SrcString,
1245ef50723SJung-uk Kim     ACPI_SIZE               Count);
1255ef50723SJung-uk Kim 
1265ef50723SJung-uk Kim int
1275ef50723SJung-uk Kim strncmp (
1285ef50723SJung-uk Kim     const char              *String1,
1295ef50723SJung-uk Kim     const char              *String2,
1305ef50723SJung-uk Kim     ACPI_SIZE               Count);
1315ef50723SJung-uk Kim 
1325ef50723SJung-uk Kim char *
1335ef50723SJung-uk Kim strncpy (
1345ef50723SJung-uk Kim     char                    *DstString,
1355ef50723SJung-uk Kim     const char              *SrcString,
1365ef50723SJung-uk Kim     ACPI_SIZE               Count);
1375ef50723SJung-uk Kim 
1385ef50723SJung-uk Kim char *
1395ef50723SJung-uk Kim strstr (
1405ef50723SJung-uk Kim     char                    *String1,
1415ef50723SJung-uk Kim     char                    *String2);
1425ef50723SJung-uk Kim 
1435ef50723SJung-uk Kim 
1445ef50723SJung-uk Kim /* Conversion */
1455ef50723SJung-uk Kim 
1465ef50723SJung-uk Kim UINT32
1475ef50723SJung-uk Kim strtoul (
1485ef50723SJung-uk Kim     const char              *String,
1495ef50723SJung-uk Kim     char                    **Terminator,
1505ef50723SJung-uk Kim     UINT32                  Base);
1515ef50723SJung-uk Kim 
1525ef50723SJung-uk Kim 
1535ef50723SJung-uk Kim /* Memory */
1545ef50723SJung-uk Kim 
1555ef50723SJung-uk Kim int
1565ef50723SJung-uk Kim memcmp (
1575ef50723SJung-uk Kim     void                    *Buffer1,
1585ef50723SJung-uk Kim     void                    *Buffer2,
1595ef50723SJung-uk Kim     ACPI_SIZE               Count);
1605ef50723SJung-uk Kim 
1615ef50723SJung-uk Kim void *
1625ef50723SJung-uk Kim memcpy (
1635ef50723SJung-uk Kim     void                    *Dest,
1645ef50723SJung-uk Kim     const void              *Src,
1655ef50723SJung-uk Kim     ACPI_SIZE               Count);
1665ef50723SJung-uk Kim 
1675ef50723SJung-uk Kim void *
1685ef50723SJung-uk Kim memset (
1695ef50723SJung-uk Kim     void                    *Dest,
1705ef50723SJung-uk Kim     int                     Value,
1715ef50723SJung-uk Kim     ACPI_SIZE               Count);
1725ef50723SJung-uk Kim 
1735ef50723SJung-uk Kim 
1745ef50723SJung-uk Kim /* upper/lower case */
1755ef50723SJung-uk Kim 
1765ef50723SJung-uk Kim int
1775ef50723SJung-uk Kim tolower (
1785ef50723SJung-uk Kim     int                     c);
1795ef50723SJung-uk Kim 
1805ef50723SJung-uk Kim int
1815ef50723SJung-uk Kim toupper (
1825ef50723SJung-uk Kim     int                     c);
1835ef50723SJung-uk Kim 
184*493deb39SJung-uk Kim /*
185*493deb39SJung-uk Kim  * utprint - printf/vprintf output functions
186*493deb39SJung-uk Kim  */
187*493deb39SJung-uk Kim const char *
188*493deb39SJung-uk Kim AcpiUtScanNumber (
189*493deb39SJung-uk Kim     const char              *String,
190*493deb39SJung-uk Kim     UINT64                  *NumberPtr);
191*493deb39SJung-uk Kim 
192*493deb39SJung-uk Kim const char *
193*493deb39SJung-uk Kim AcpiUtPrintNumber (
194*493deb39SJung-uk Kim     char                    *String,
195*493deb39SJung-uk Kim     UINT64                  Number);
196*493deb39SJung-uk Kim 
197*493deb39SJung-uk Kim int
198*493deb39SJung-uk Kim vsnprintf (
199*493deb39SJung-uk Kim     char                    *String,
200*493deb39SJung-uk Kim     ACPI_SIZE               Size,
201*493deb39SJung-uk Kim     const char              *Format,
202*493deb39SJung-uk Kim     va_list                 Args);
203*493deb39SJung-uk Kim 
204*493deb39SJung-uk Kim int
205*493deb39SJung-uk Kim snprintf (
206*493deb39SJung-uk Kim     char                    *String,
207*493deb39SJung-uk Kim     ACPI_SIZE               Size,
208*493deb39SJung-uk Kim     const char              *Format,
209*493deb39SJung-uk Kim     ...);
210*493deb39SJung-uk Kim 
211*493deb39SJung-uk Kim int
212*493deb39SJung-uk Kim sprintf (
213*493deb39SJung-uk Kim     char                    *String,
214*493deb39SJung-uk Kim     const char              *Format,
215*493deb39SJung-uk Kim     ...);
216*493deb39SJung-uk Kim 
217*493deb39SJung-uk Kim #ifdef ACPI_APPLICATION
218*493deb39SJung-uk Kim #define SEEK_SET            0
219*493deb39SJung-uk Kim #define SEEK_CUR            1
220*493deb39SJung-uk Kim #define SEEK_END            2
221*493deb39SJung-uk Kim 
222*493deb39SJung-uk Kim /*
223*493deb39SJung-uk Kim  * NOTE: Currently we only need to update errno for file IOs. Other
224*493deb39SJung-uk Kim  *       Clibrary invocations in ACPICA do not make descisions according to
225*493deb39SJung-uk Kim  *       the errno.
226*493deb39SJung-uk Kim  */
227*493deb39SJung-uk Kim extern int errno;
228*493deb39SJung-uk Kim 
229*493deb39SJung-uk Kim int
230*493deb39SJung-uk Kim vprintf (
231*493deb39SJung-uk Kim     const char              *Format,
232*493deb39SJung-uk Kim     va_list                 Args);
233*493deb39SJung-uk Kim 
234*493deb39SJung-uk Kim int
235*493deb39SJung-uk Kim printf (
236*493deb39SJung-uk Kim     const char              *Format,
237*493deb39SJung-uk Kim     ...);
238*493deb39SJung-uk Kim 
239*493deb39SJung-uk Kim int
240*493deb39SJung-uk Kim vfprintf (
241*493deb39SJung-uk Kim     FILE                    *File,
242*493deb39SJung-uk Kim     const char              *Format,
243*493deb39SJung-uk Kim     va_list                 Args);
244*493deb39SJung-uk Kim 
245*493deb39SJung-uk Kim int
246*493deb39SJung-uk Kim fprintf (
247*493deb39SJung-uk Kim     FILE                    *File,
248*493deb39SJung-uk Kim     const char              *Format,
249*493deb39SJung-uk Kim     ...);
250*493deb39SJung-uk Kim 
251*493deb39SJung-uk Kim FILE *
252*493deb39SJung-uk Kim fopen (
253*493deb39SJung-uk Kim     const char              *Path,
254*493deb39SJung-uk Kim     const char              *Modes);
255*493deb39SJung-uk Kim 
256*493deb39SJung-uk Kim void
257*493deb39SJung-uk Kim fclose (
258*493deb39SJung-uk Kim     FILE                    *File);
259*493deb39SJung-uk Kim 
260*493deb39SJung-uk Kim int
261*493deb39SJung-uk Kim fread (
262*493deb39SJung-uk Kim     void                    *Buffer,
263*493deb39SJung-uk Kim     ACPI_SIZE               Size,
264*493deb39SJung-uk Kim     ACPI_SIZE               Count,
265*493deb39SJung-uk Kim     FILE                    *File);
266*493deb39SJung-uk Kim 
267*493deb39SJung-uk Kim int
268*493deb39SJung-uk Kim fwrite (
269*493deb39SJung-uk Kim     void                    *Buffer,
270*493deb39SJung-uk Kim     ACPI_SIZE               Size,
271*493deb39SJung-uk Kim     ACPI_SIZE               Count,
272*493deb39SJung-uk Kim     FILE                    *File);
273*493deb39SJung-uk Kim 
274*493deb39SJung-uk Kim int
275*493deb39SJung-uk Kim fseek (
276*493deb39SJung-uk Kim     FILE                    *File,
277*493deb39SJung-uk Kim     long                    Offset,
278*493deb39SJung-uk Kim     int                     From);
279*493deb39SJung-uk Kim 
280*493deb39SJung-uk Kim long
281*493deb39SJung-uk Kim ftell (
282*493deb39SJung-uk Kim     FILE                    *File);
283*493deb39SJung-uk Kim #endif
284*493deb39SJung-uk Kim 
2855ef50723SJung-uk Kim #endif /* _ACCLIB_H */
286