Initial port from omapzoom http://omapzoom.org/gf/project/omapbridge For details, http://omapzoom.org/gf/project/omapbridge/docman/?subdir=3 Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@xxxxxxxxx> --- drivers/dsp/bridge/gen/_gt_para.c | 107 ++++++++++++ drivers/dsp/bridge/gen/gb.c | 182 +++++++++++++++++++ drivers/dsp/bridge/gen/gh.c | 191 ++++++++++++++++++++ drivers/dsp/bridge/gen/gs.c | 108 ++++++++++++ drivers/dsp/bridge/gen/gt.c | 346 +++++++++++++++++++++++++++++++++++++ drivers/dsp/bridge/gen/uuidutil.c | 238 +++++++++++++++++++++++++ 6 files changed, 1172 insertions(+), 0 deletions(-) create mode 100644 drivers/dsp/bridge/gen/_gt_para.c create mode 100644 drivers/dsp/bridge/gen/gb.c create mode 100644 drivers/dsp/bridge/gen/gh.c create mode 100644 drivers/dsp/bridge/gen/gs.c create mode 100644 drivers/dsp/bridge/gen/gt.c create mode 100644 drivers/dsp/bridge/gen/uuidutil.c diff --git a/drivers/dsp/bridge/gen/_gt_para.c b/drivers/dsp/bridge/gen/_gt_para.c new file mode 100644 index 0000000..1685b3a --- /dev/null +++ b/drivers/dsp/bridge/gen/_gt_para.c @@ -0,0 +1,107 @@ +/* + * linux/drivers/dsp/bridge/gen/linux/_gt_para.c + * + * DSP-BIOS Bridge driver support functions for TI OMAP processors. + * + * Copyright (C) 2005-2006 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + + +/* + * ======== _gt_para.c ======== + * Description: + * Configuration parameters for GT. This file is separated from + * gt.c so that GT_assert() can reference the error function without + * forcing the linker to include all the code for GT_set(), GT_init(), + * etc. into a fully bound image. Thus, GT_assert() can be retained in + * a program for which GT_?trace() has been compiled out. + * + *! Revision History: + *! ================ + *! 24-Feb-2003 vp: Code Review Updates. + *! 18-Oct-2002 sb: Ported to Linux platform. + *! 03-Jul-2001 rr: Removed kfuncs.h because of build errors. + *! 07-Dec-1999 ag: Fxn error now causes a WinCE DebugBreak; + *! 30-Aug-1999 ag: Now uses GP_printf for printf and error. + *! + */ + +/* ----------------------------------- Host OS */ +#include <host_os.h> + +/* ----------------------------------- DSP/BIOS Bridge */ +#include <std.h> + +/* ----------------------------------- Trace & Debug */ +#include <gt.h> + +/* ----------------------------------- Function Prototypes */ +static void error(char *msg, ...); +static s32 GT_nop(void); + +/* ----------------------------------- Defines, Data Structures, Typedefs */ + +struct GT_Config _GT_params = { + (Fxn) printk, /* printf */ + (Fxn) NULL, /* procid */ + (Fxn) GT_nop, /* taskid */ + (Fxn) error, /* error */ +}; + +/* ----------------------------------- Globals */ +struct GT_Config *GT = &_GT_params; + +/* + * ======== GT_nop ======== + */ +static s32 GT_nop(void) +{ + return 0; +} + +/* + * ======== error ======== + * purpose: + * Prints error onto the standard output. + */ +static void error(char *fmt, ...) +{ + s32 arg1, arg2, arg3, arg4, arg5, arg6; + + va_list va; + + va_start(va, fmt); + + arg1 = va_arg(va, s32); + arg2 = va_arg(va, s32); + arg3 = va_arg(va, s32); + arg4 = va_arg(va, s32); + arg5 = va_arg(va, s32); + arg6 = va_arg(va, s32); + + va_end(va); + + (*GT->PRINTFXN) ("ERROR: "); + (*GT->PRINTFXN) (fmt, arg1, arg2, arg3, arg4, arg5, arg6); + +#if (defined DEBUG) || (defined DDSP_DEBUG_PRODUCT) + if (in_interrupt()) { + printk(KERN_INFO "Not stopping after error since ISR/DPC " + "are disabled\n"); + } else { + set_current_state(TASK_INTERRUPTIBLE); + flush_signals(current); + schedule(); + flush_signals(current); + printk(KERN_INFO "Signaled in error function\n"); + } +#endif +} diff --git a/drivers/dsp/bridge/gen/gb.c b/drivers/dsp/bridge/gen/gb.c new file mode 100644 index 0000000..15cec69 --- /dev/null +++ b/drivers/dsp/bridge/gen/gb.c @@ -0,0 +1,182 @@ +/* + * linux/drivers/dsp/bridge/gen/gb.c + * + * DSP-BIOS Bridge driver support functions for TI OMAP processors. + * + * Copyright (C) 2005-2006 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + + +/* + * ======== gb.c ======== + * Description: Generic bitmap operations. + * + *! Revision History + *! ================ + *! 24-Feb-2003 vp Code review updates. + *! 17-Dec-2002 map Fixed GB_minset(), GB_empty(), and GB_full(), + *! to ensure only 'len' bits are considered in the map + *! 18-Oct-2002 sb Ported to Linux platform. + *! 06-Dec-2001 jeh Fixed bug in GB_minclear(). + *! + */ + +/* ----------------------------------- DSP/BIOS Bridge */ +#include <std.h> +#include <linux/types.h> +/* ----------------------------------- This */ +#include <gs.h> +#include <gb.h> + +typedef GB_BitNum GB_WordNum; + +struct GB_TMap { + GB_BitNum len; + GB_WordNum wcnt; + u32 *words; +}; + +/* + * ======== GB_clear ======== + * purpose: + * Clears a bit in the bit map. + */ + +void GB_clear(struct GB_TMap *map, GB_BitNum bitn) +{ + u32 mask; + + mask = 1L << (bitn % BITS_PER_LONG); + map->words[bitn / BITS_PER_LONG] &= ~mask; +} + +/* + * ======== GB_create ======== + * purpose: + * Creates a bit map. + */ + +struct GB_TMap *GB_create(GB_BitNum len) +{ + struct GB_TMap *map; + GB_WordNum i; + map = (struct GB_TMap *)GS_alloc(sizeof(struct GB_TMap)); + if (map != NULL) { + map->len = len; + map->wcnt = len / BITS_PER_LONG + 1; + map->words = (u32 *)GS_alloc(map->wcnt * sizeof(u32)); + if (map->words != NULL) { + for (i = 0; i < map->wcnt; i++) + map->words[i] = 0L; + + } else { + GS_frees(map, sizeof(struct GB_TMap)); + map = NULL; + } + } + + return map; +} + +/* + * ======== GB_delete ======== + * purpose: + * Frees a bit map. + */ + +void GB_delete(struct GB_TMap *map) +{ + GS_frees(map->words, map->wcnt * sizeof(u32)); + GS_frees(map, sizeof(struct GB_TMap)); +} + +/* + * ======== GB_findandset ======== + * purpose: + * Finds a free bit and sets it. + */ +GB_BitNum GB_findandset(struct GB_TMap *map) +{ + GB_BitNum bitn; + + bitn = GB_minclear(map); + + if (bitn != GB_NOBITS) + GB_set(map, bitn); + + return bitn; +} + +/* + * ======== GB_minclear ======== + * purpose: + * returns the location of the first unset bit in the bit map. + */ +GB_BitNum GB_minclear(struct GB_TMap *map) +{ + GB_BitNum bit_location = 0; + GB_BitNum bitAcc = 0; + GB_WordNum i; + GB_BitNum bit; + u32 *word; + + for (word = map->words, i = 0; i < map->wcnt; word++, i++) { + if (~*word) { + for (bit = 0; bit < BITS_PER_LONG; bit++, bitAcc++) { + if (bitAcc == map->len) + return GB_NOBITS; + + if (~*word & (1L << bit)) { + bit_location = i * BITS_PER_LONG + bit; + return bit_location; + } + + } + } else { + bitAcc += BITS_PER_LONG; + } + } + + return GB_NOBITS; +} + +/* + * ======== GB_set ======== + * purpose: + * Sets a bit in the bit map. + */ + +void GB_set(struct GB_TMap *map, GB_BitNum bitn) +{ + u32 mask; + + mask = 1L << (bitn % BITS_PER_LONG); + map->words[bitn / BITS_PER_LONG] |= mask; +} + +/* + * ======== GB_test ======== + * purpose: + * Returns true if the bit is set in the specified location. + */ + +bool GB_test(struct GB_TMap *map, GB_BitNum bitn) +{ + bool state; + u32 mask; + u32 word; + + mask = 1L << (bitn % BITS_PER_LONG); + word = map->words[bitn / BITS_PER_LONG]; + state = word & mask ? TRUE : FALSE; + + return state; +} diff --git a/drivers/dsp/bridge/gen/gh.c b/drivers/dsp/bridge/gen/gh.c new file mode 100644 index 0000000..c267b16 --- /dev/null +++ b/drivers/dsp/bridge/gen/gh.c @@ -0,0 +1,191 @@ +/* + * linux/drivers/dsp/bridge/gen/gh.c + * + * DSP-BIOS Bridge driver support functions for TI OMAP processors. + * + * Copyright (C) 2005-2006 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + + +/* + * ======== gh.c ======== + */ + +#include <std.h> + +#include <host_os.h> + +#include <gs.h> + +#include <gh.h> + +struct Elem { + struct Elem *next; + u8 data[1]; +}; + +struct GH_THashTab { + u16 maxBucket; + u16 valSize; + struct Elem **buckets; + u16(*hash) (void *, u16); + bool(*match) (void *, void *); + void(*delete) (void *); +}; + +static void Nop(void *p); +static s32 curInit; +static void myfree(void *ptr, s32 size); + +/* + * ======== GH_create ======== + */ + +struct GH_THashTab *GH_create(u16 maxBucket, u16 valSize, + u16(*hash)(void *, u16), bool(*match)(void *, void *), + void(*delete)(void *)) +{ + struct GH_THashTab *hashTab; + u16 i; + hashTab = (struct GH_THashTab *)GS_alloc(sizeof(struct GH_THashTab)); + if (hashTab == NULL) + return NULL; + hashTab->maxBucket = maxBucket; + hashTab->valSize = valSize; + hashTab->hash = hash; + hashTab->match = match; + hashTab->delete = delete == NULL ? Nop : delete; + + hashTab->buckets = (struct Elem **) + GS_alloc(sizeof(struct Elem *) * maxBucket); + if (hashTab->buckets == NULL) { + GH_delete(hashTab); + return NULL; + } + + for (i = 0; i < maxBucket; i++) + hashTab->buckets[i] = NULL; + + return hashTab; +} + +/* + * ======== GH_delete ======== + */ +void GH_delete(struct GH_THashTab *hashTab) +{ + struct Elem *elem, *next; + u16 i; + + if (hashTab != NULL) { + if (hashTab->buckets != NULL) { + for (i = 0; i < hashTab->maxBucket; i++) { + for (elem = hashTab->buckets[i]; elem != NULL; + elem = next) { + next = elem->next; + (*hashTab->delete) (elem->data); + myfree(elem, sizeof(struct Elem) - 1 + + hashTab->valSize); + } + } + + myfree(hashTab->buckets, sizeof(struct Elem *) + * hashTab->maxBucket); + } + + myfree(hashTab, sizeof(struct GH_THashTab)); + } +} + +/* + * ======== GH_exit ======== + */ + +void GH_exit(void) +{ + if (curInit-- == 1) + GS_exit(); + +} + +/* + * ======== GH_find ======== + */ + +void *GH_find(struct GH_THashTab *hashTab, void *key) +{ + struct Elem *elem; + + elem = hashTab->buckets[(*hashTab->hash)(key, hashTab->maxBucket)]; + + for (; elem; elem = elem->next) { + if ((*hashTab->match)(key, elem->data)) + return elem->data; + } + + return NULL; +} + +/* + * ======== GH_init ======== + */ + +void GH_init(void) +{ + if (curInit++ == 0) + GS_init(); +} + +/* + * ======== GH_insert ======== + */ + +void *GH_insert(struct GH_THashTab *hashTab, void *key, void *value) +{ + struct Elem *elem; + u16 i; + char *src, *dst; + + elem = (struct Elem *)GS_alloc(sizeof(struct Elem) - 1 + + hashTab->valSize); + if (elem != NULL) { + + dst = (char *)elem->data; + src = (char *)value; + for (i = 0; i < hashTab->valSize; i++) + *dst++ = *src++; + + i = (*hashTab->hash)(key, hashTab->maxBucket); + elem->next = hashTab->buckets[i]; + hashTab->buckets[i] = elem; + + return elem->data; + } + + return NULL; +} + +/* + * ======== Nop ======== + */ +/* ARGSUSED */ +static void Nop(void *p) +{ + p = p; /* stifle compiler warning */ +} + +/* + * ======== myfree ======== + */ +static void myfree(void *ptr, s32 size) +{ + GS_free(ptr); +} diff --git a/drivers/dsp/bridge/gen/gs.c b/drivers/dsp/bridge/gen/gs.c new file mode 100644 index 0000000..8aa3955 --- /dev/null +++ b/drivers/dsp/bridge/gen/gs.c @@ -0,0 +1,108 @@ +/* + * linux/drivers/dsp/bridge/gen/gs.c + * + * DSP-BIOS Bridge driver support functions for TI OMAP processors. + * + * Copyright (C) 2005-2006 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + + +/* + * ======== gs.c ======== + * Description: + * General storage memory allocator services. + * + *! Revision History + *! ================ + *! 29-Sep-1999 ag: Un-commented MEM_Init in GS_init(). + *! 14-May-1997 mg: Modified to use new GS API for GS_free() and GS_frees(). + *! 06-Nov-1996 gp: Re-commented MEM_Init in GS_init(). GS needs GS_Exit(). + *! 21-Oct-1996 db: Un-commented MEM_Init in GS_init(). + *! 21-May-1996 mg: Created from original stdlib implementation. + */ + +/* ----------------------------------- DSP/BIOS Bridge */ +#include <std.h> +#include <dbdefs.h> +#include <linux/types.h> +/* ----------------------------------- OS Adaptation Layer */ +#include <mem.h> + +/* ----------------------------------- This */ +#include <gs.h> + +/* ----------------------------------- Globals */ +static u32 cumsize; + +/* + * ======== GS_alloc ======== + * purpose: + * Allocates memory of the specified size. + */ +void *GS_alloc(u32 size) +{ + void *p; + + p = MEM_Calloc(size, MEM_PAGED); + if (p == NULL) + return NULL; + cumsize += size; + return p; +} + +/* + * ======== GS_exit ======== + * purpose: + * Discontinue the usage of the GS module. + */ +void GS_exit(void) +{ + MEM_Exit(); +} + +/* + * ======== GS_free ======== + * purpose: + * Frees the memory. + */ +void GS_free(void *ptr) +{ + MEM_Free(ptr); + /* ack! no size info */ + /* cumsize -= size; */ +} + +/* + * ======== GS_frees ======== + * purpose: + * Frees the memory. + */ +void GS_frees(void *ptr, u32 size) +{ + MEM_Free(ptr); + cumsize -= size; +} + +/* + * ======== GS_init ======== + * purpose: + * Initializes the GS module. + */ +void GS_init(void) +{ + static bool curInit = false; + + if (curInit == false) { + curInit = true; + + MEM_Init(); + } +} diff --git a/drivers/dsp/bridge/gen/gt.c b/drivers/dsp/bridge/gen/gt.c new file mode 100644 index 0000000..dfee97e --- /dev/null +++ b/drivers/dsp/bridge/gen/gt.c @@ -0,0 +1,346 @@ +/* + * linux/drivers/dsp/bridge/gen/gt.c + * + * DSP-BIOS Bridge driver support functions for TI OMAP processors. + * + * Copyright (C) 2005-2006 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + + +/* + * ======== gt.c ======== + * Description: This module implements the trace mechanism for bridge. + * + *! Revision History + *! ================ + *! 16-May-1997 dr Changed GT_Config member names to conform to coding + *! standards. + *! 23-Apr-1997 ge Check for GT->TIDFXN for NULL before calling it. + *! 03-Jan-1997 ge Changed GT_Config structure member names to eliminate + *! preprocessor confusion with other macros. + */ + +/* ----------------------------------- DSP/BIOS Bridge */ +#include <std.h> + +/* ----------------------------------- This */ +#include <gt.h> + +#define GT_WILD '*' + +#define GT_CLEAR '=' +#define GT_ON '+' +#define GT_OFF '-' + +enum GT_State { + GT_SEP, + GT_FIRST, + GT_SECOND, + GT_OP, + GT_DIGITS +} ; + +static char *GT_1format = "%s - %d: "; +static char *GT_2format = "%s - %d(%d): "; + +unsigned char *GT_tMask[GT_BOUND]; + +static bool curInit = false; +static char *separator; +static unsigned char tabMem[GT_BOUND][sizeof(unsigned char) * GT_BOUND]; + +static void error(char *string); +static void setMask(s16 index1, s16 index2, char op, unsigned char mask); + +/* + * ======== _GT_create ======== + * purpose: + * Creates GT mask. + */ +void _GT_create(struct GT_Mask *mask, char *modName) +{ + mask->modName = modName; + mask->flags = &(GT_tMask[modName[0] - 'A'][modName[1] - 'A']); +} + +/* + * ======== GT_init ======== + * purpose: + * Initializes GT module. + */ +#ifdef GT_init +#undef GT_init +#endif +void GT_init(void) +{ + register unsigned char index1; + register unsigned char index2; + + if (!curInit) { + curInit = true; + + separator = " ,;/"; + + for (index1 = 0; index1 < GT_BOUND; index1++) { + GT_tMask[index1] = tabMem[index1]; + for (index2 = 0; index2 < GT_BOUND; index2++) { + /* no tracing */ + GT_tMask[index1][index2] = 0x00; + } + } + } +} + +/* + * ======== _GT_set ======== + * purpose: + * Sets the trace string format. + */ + +void _GT_set(char *str) +{ + enum GT_State state; + char *sep; + s16 index1 = GT_BOUND; /* indicates all values */ + s16 index2 = GT_BOUND; /* indicates all values */ + char op = GT_CLEAR; + bool maskValid; + s16 digit; + register unsigned char mask = 0x0; /* no tracing */ + + if (str == NULL) + return; + + maskValid = false; + state = GT_SEP; + while (*str != '\0') { + switch ((s32) state) { + case (s32) GT_SEP: + maskValid = false; + sep = separator; + while (*sep != '\0') { + if (*str == *sep) { + str++; + break; + } else { + sep++; + } + } + if (*sep == '\0') + state = GT_FIRST; + + break; + case (s32) GT_FIRST: + if (*str == GT_WILD) { + /* indicates all values */ + index1 = GT_BOUND; + /* indicates all values */ + index2 = GT_BOUND; + state = GT_OP; + } else { + if (*str >= 'a') + index1 = (s16) (*str - 'a'); + else + index1 = (s16) (*str - 'A'); + if ((index1 >= 0) && (index1 < GT_BOUND)) + state = GT_SECOND; + else + state = GT_SEP; + } + str++; + break; + case (s32) GT_SECOND: + if (*str == GT_WILD) { + index2 = GT_BOUND; /* indicates all values */ + state = GT_OP; + str++; + } else { + if (*str >= 'a') + index2 = (s16) (*str - 'a'); + else + index2 = (s16) (*str - 'A'); + if ((index2 >= 0) && (index2 < GT_BOUND)) { + state = GT_OP; + str++; + } else { + state = GT_SEP; + } + } + break; + case (s32) GT_OP: + op = *str; + mask = 0x0; /* no tracing */ + switch (op) { + case (s32) GT_CLEAR: + maskValid = true; + case (s32) GT_ON: + case (s32) GT_OFF: + state = GT_DIGITS; + str++; + break; + default: + state = GT_SEP; + break; + } + break; + case (s32) GT_DIGITS: + digit = (s16) (*str - '0'); + if ((digit >= 0) && (digit <= 7)) { + mask |= (0x01 << digit); + maskValid = true; + str++; + } else { + if (maskValid == true) { + setMask(index1, index2, op, mask); + maskValid = false; + } + state = GT_SEP; + } + break; + default: + error("illegal trace mask"); + break; + } + } + + if (maskValid) + setMask(index1, index2, op, mask); +} + +/* + * ======== _GT_trace ======== + * purpose: + * Prints the input string onto standard output + */ + +s32 _GT_trace(struct GT_Mask *mask, char *format, ...) +{ + s32 arg1, arg2, arg3, arg4, arg5, arg6; + va_list va; + + va_start(va, format); + + arg1 = va_arg(va, s32); + arg2 = va_arg(va, s32); + arg3 = va_arg(va, s32); + arg4 = va_arg(va, s32); + arg5 = va_arg(va, s32); + arg6 = va_arg(va, s32); + + va_end(va); +#ifdef DEBUG + if (GT->PIDFXN == NULL) { + (*GT->PRINTFXN)(GT_1format, mask->modName, GT->TIDFXN ? + (*GT->TIDFXN)() : 0); + } else { + (*GT->PRINTFXN)(GT_2format, mask->modName, (*GT->PIDFXN)(), + GT->TIDFXN ? (*GT->TIDFXN)() : 0); + } +#endif + (*GT->PRINTFXN)(format, arg1, arg2, arg3, arg4, arg5, arg6); + + return 0; +} + +/* + * ======== error ======== + * purpose: + * Prints errors onto the standard output. + */ +static void error(char *string) +{ + (*GT->PRINTFXN)("GT: %s", string); +} + +/* + * ======== setmask ======== + * purpose: + * Sets mask for the GT module. + */ + +static void setMask(s16 index1, s16 index2, char op, u8 mask) +{ + register s16 index; + + if (index1 < GT_BOUND) { + if (index2 < GT_BOUND) { + switch (op) { + case (s32) GT_CLEAR: + GT_tMask[index1][index2] = mask; + break; + case (s32) GT_ON: + GT_tMask[index1][index2] |= mask; + break; + case (s32) GT_OFF: + GT_tMask[index1][index2] &= ~mask; + break; + default: + error("illegal trace mask"); + break; + } + } else { + for (index2--; index2 >= 0; index2--) { + switch (op) { + case (s32) GT_CLEAR: + GT_tMask[index1][index2] = mask; + break; + case (s32) GT_ON: + GT_tMask[index1][index2] |= mask; + break; + case (s32) GT_OFF: + GT_tMask[index1][index2] &= ~mask; + break; + default: + error("illegal trace mask"); + break; + } + } + } + } else { + for (index1--; index1 >= 0; index1--) { + if (index2 < GT_BOUND) { + switch (op) { + case (s32) GT_CLEAR: + GT_tMask[index1][index2] = mask; + break; + case (s32) GT_ON: + GT_tMask[index1][index2] |= mask; + break; + case (s32) GT_OFF: + GT_tMask[index1][index2] &= ~mask; + break; + default: + error("illegal trace mask"); + break; + } + } else { + index = GT_BOUND; + for (index--; index >= 0; index--) { + switch (op) { + case (s32) GT_CLEAR: + GT_tMask[index1][index] = mask; + break; + case (s32) GT_ON: + GT_tMask[index1][index] |= mask; + break; + case (s32) GT_OFF: + GT_tMask[index1][index] &= + ~mask; + break; + default: + error("illegal trace mask"); + break; + } + } + } + } + } +} diff --git a/drivers/dsp/bridge/gen/uuidutil.c b/drivers/dsp/bridge/gen/uuidutil.c new file mode 100644 index 0000000..ac3a017 --- /dev/null +++ b/drivers/dsp/bridge/gen/uuidutil.c @@ -0,0 +1,238 @@ +/* + * linux/drivers/dsp/bridge/gen/linux/uuidutil.c + * + * DSP-BIOS Bridge driver support functions for TI OMAP processors. + * + * Copyright (C) 2005-2006 Texas Instruments, Inc. + * + * This package is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + + +/* + * ======== uuidutil.c ======== + * Description: + * This file contains the implementation of UUID helper functions. + * + *! Revision History + *! ================ + *! 23-Feb-2003 vp: Code review updates. + *! 18-Oct-2003 vp: Ported to Linux platform. + *! 31-Aug-2000 rr: UUID_UuidFromString bug fixed. + *! 29-Aug-2000 rr: Modified UUID_UuidFromString. + *! 09-Nov-2000 kc: Modified UUID_UuidFromString to simplify implementation. + *! 30-Oct-2000 kc: Modified UUID utility module function prefix. + *! 10-Aug-2000 kc: Created. + *! + */ + +/* ----------------------------------- Host OS */ +#include <host_os.h> + +/* ----------------------------------- DSP/BIOS Bridge */ +#include <std.h> +#include <dbdefs.h> + +/* ----------------------------------- Trace & Debug */ +#include <dbc.h> + +/* ----------------------------------- This */ +#include <uuidutil.h> + +/* + * ======== UUID_UuidToString ======== + * Purpose: + * Converts a struct DSP_UUID to a string. + * Note: snprintf format specifier is: + * %[flags] [width] [.precision] [{h | l | I64 | L}]type + */ +void UUID_UuidToString(IN struct DSP_UUID *pUuid, OUT char *pszUuid, + IN s32 size) +{ + s32 i; /* return result from snprintf. */ + + DBC_Require(pUuid && pszUuid); + + i = snprintf(pszUuid, size, + "%.8X_%.4X_%.4X_%.2X%.2X_%.2X%.2X%.2X%.2X%.2X%.2X", + pUuid->ulData1, pUuid->usData2, pUuid->usData3, + pUuid->ucData4, pUuid->ucData5, pUuid->ucData6[0], + pUuid->ucData6[1], pUuid->ucData6[2], pUuid->ucData6[3], + pUuid->ucData6[4], pUuid->ucData6[5]); + + DBC_Ensure(i != -1); +} + +/* + * ======== htoi ======== + * Purpose: + * Converts a hex value to a decimal integer. + */ + +static int htoi(char c) +{ + switch (c) { + case '0': + return 0; + case '1': + return 1; + case '2': + return 2; + case '3': + return 3; + case '4': + return 4; + case '5': + return 5; + case '6': + return 6; + case '7': + return 7; + case '8': + return 8; + case '9': + return 9; + case 'A': + return 10; + case 'B': + return 11; + case 'C': + return 12; + case 'D': + return 13; + case 'E': + return 14; + case 'F': + return 15; + case 'a': + return 10; + case 'b': + return 11; + case 'c': + return 12; + case 'd': + return 13; + case 'e': + return 14; + case 'f': + return 15; + } + return 0; +} + +/* + * ======== UUID_UuidFromString ======== + * Purpose: + * Converts a string to a struct DSP_UUID. + */ +void UUID_UuidFromString(IN char *pszUuid, OUT struct DSP_UUID *pUuid) +{ + char c; + s32 i, j; + s32 result; + char *temp = pszUuid; + + result = 0; + for (i = 0; i < 8; i++) { + /* Get first character in string */ + c = *temp; + + /* Increase the results by new value */ + result *= 16; + result += htoi(c); + + /* Go to next character in string */ + temp++; + } + pUuid->ulData1 = result; + + /* Step over underscore */ + temp++; + + result = 0; + for (i = 0; i < 4; i++) { + /* Get first character in string */ + c = *temp; + + /* Increase the results by new value */ + result *= 16; + result += htoi(c); + + /* Go to next character in string */ + temp++; + } + pUuid->usData2 = (u16)result; + + /* Step over underscore */ + temp++; + + result = 0; + for (i = 0; i < 4; i++) { + /* Get first character in string */ + c = *temp; + + /* Increase the results by new value */ + result *= 16; + result += htoi(c); + + /* Go to next character in string */ + temp++; + } + pUuid->usData3 = (u16)result; + + /* Step over underscore */ + temp++; + + result = 0; + for (i = 0; i < 2; i++) { + /* Get first character in string */ + c = *temp; + + /* Increase the results by new value */ + result *= 16; + result += htoi(c); + + /* Go to next character in string */ + temp++; + } + pUuid->ucData4 = (u8)result; + + result = 0; + for (i = 0; i < 2; i++) { + /* Get first character in string */ + c = *temp; + + /* Increase the results by new value */ + result *= 16; + result += htoi(c); + + /* Go to next character in string */ + temp++; + } + pUuid->ucData5 = (u8)result; + + /* Step over underscore */ + temp++; + + for (j = 0; j < 6; j++) { + result = 0; + for (i = 0; i < 2; i++) { + /* Get first character in string */ + c = *temp; + + /* Increase the results by new value */ + result *= 16; + result += htoi(c); + + /* Go to next character in string */ + temp++; + } + pUuid->ucData6[j] = (u8)result; + } +} -- 1.5.5.1.357.g1af8b -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html