PageRenderTime 42ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/drivers/net/wireless/tiwlan1251/pform/linux/src/stack_profile.c

http://github.com/CyanogenMod/cm-kernel
C | 87 lines | 33 code | 13 blank | 41 comment | 4 complexity | 3e05994c786131c1cb91155920437fd8 MD5 | raw file
Possible License(s): AGPL-1.0, GPL-2.0, LGPL-2.0
  1. /****************************************************************************
  2. **+-----------------------------------------------------------------------+**
  3. **| |**
  4. **| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved. |**
  5. **| All rights reserved. |**
  6. **| |**
  7. **| Redistribution and use in source and binary forms, with or without |**
  8. **| modification, are permitted provided that the following conditions |**
  9. **| are met: |**
  10. **| |**
  11. **| * Redistributions of source code must retain the above copyright |**
  12. **| notice, this list of conditions and the following disclaimer. |**
  13. **| * Redistributions in binary form must reproduce the above copyright |**
  14. **| notice, this list of conditions and the following disclaimer in |**
  15. **| the documentation and/or other materials provided with the |**
  16. **| distribution. |**
  17. **| * Neither the name Texas Instruments nor the names of its |**
  18. **| contributors may be used to endorse or promote products derived |**
  19. **| from this software without specific prior written permission. |**
  20. **| |**
  21. **| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |**
  22. **| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |**
  23. **| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
  24. **| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |**
  25. **| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
  26. **| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |**
  27. **| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
  28. **| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
  29. **| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |**
  30. **| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
  31. **| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |**
  32. **| |**
  33. **+-----------------------------------------------------------------------+**
  34. ****************************************************************************/
  35. #include <linux/stddef.h>
  36. unsigned long check_stack(unsigned long *base)
  37. {
  38. register unsigned long sp asm ("sp");
  39. unsigned long retval = sp;
  40. *base = ((sp & ~0x1fff) + 0x380);
  41. return retval;
  42. }
  43. unsigned long check_stack_start(unsigned long *base)
  44. {
  45. unsigned long i;
  46. unsigned long from,to;
  47. to = check_stack(&from);
  48. *base = from;
  49. /* run from the stack pointer down to the base */
  50. for (i = from;i<to;i+=4)
  51. {
  52. /* fill up the pattern */
  53. *(long *)i = 0xdeadbeef;
  54. }
  55. /* printk("check_stack_start: from =%x to=%x data=%x\n",from,to,*(long *)(from+4));*/
  56. return to;
  57. }
  58. unsigned long check_stack_stop(unsigned long *base)
  59. {
  60. unsigned long i;
  61. unsigned long from,to;
  62. to = check_stack(&from);
  63. *base = from;
  64. /* run from the stack pointer down to the base */
  65. for (i = from;i<to;i+=4)
  66. {
  67. /* check up the pattern */
  68. if ((*(long *)i) != 0xdeadbeef)
  69. break;
  70. }
  71. /*printk("check_stack_stop: from =%x to=%x data=%x data=%x i=0x%x\n",from,to,*(long *)from,*(long *)(from+4),i);*/
  72. /* return the first time when the pattern doesn't match */
  73. return i;
  74. }