unmappage.c

Go to the documentation of this file.
00001 /*****************************************************************************************
00002  Copyright (c) 2002-2004 The UbixOS Project
00003  All rights reserved.
00004 
00005  Redistribution and use in source and binary forms, with or without modification, are
00006  permitted provided that the following conditions are met:
00007 
00008  Redistributions of source code must retain the above copyright notice, this list of
00009  conditions, the following disclaimer and the list of authors.  Redistributions in binary
00010  form must reproduce the above copyright notice, this list of conditions, the following
00011  disclaimer and the list of authors in the documentation and/or other materials provided
00012  with the distribution. Neither the name of the UbixOS Project nor the names of its
00013  contributors may be used to endorse or promote products derived from this software
00014  without specific prior written permission.
00015 
00016  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
00017  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
00018  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
00019  THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00020  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
00021  OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00022  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
00023  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00024  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00025 
00026  $Id: unmappage_8c-source.html 88 2016-01-12 00:11:29Z reddawg $
00027 
00028 *****************************************************************************************/
00029 
00030 #include <vmm/vmm.h>
00031 
00032 /************************************************************************
00033 
00034 Function: void vmmUnmapPage(uInt32 pageAddr,int flags);
00035 Description: This Function Will Unmap A Page From The Kernel VM Space
00036              The Flags Variable Decides If Its To Free The Page Or Not
00037              A Flag Of 0 Will Free It And A Flag Of 1 Will Keep It
00038 Notes:
00039 
00040 07/30/02 - I Have Decided That This Should Free The Physical Page There
00041            Is No Reason To Keep It Marked As Not Available
00042 
00043 07/30/02 - Ok A Found A Reason To Keep It Marked As Available I Admit
00044            Even I Am Not Perfect Ok The Case Where You Wouldn't Want To
00045            Free It Would Be On Something Like Where I Allocated A Page
00046            To Create A New Virtual Space So Now It Has A Flag
00047 
00048 ************************************************************************/
00049 void 
00050 vmmUnmapPage(uInt32 pageAddr, int flags)
00051 {
00052   int             pageDirectoryIndex = 0, pageTableIndex = 0;
00053   uInt32         *pageTable = 0x0;
00054 
00055   /* Get The Index To The Page Directory */
00056   pageDirectoryIndex = (pageAddr >> 22);
00057   
00058   //Calculate The Page Table Index
00059   pageTableIndex = ((pageAddr >> 12) & 0x3FF);
00060 
00061   /* Set pageTable To The Virtual Address Of Table */
00062   pageTable = (uInt32 *) (tablesBaseAddress + (0x1000 * pageDirectoryIndex));
00063   /* Free The Physical Page If Flags Is 0 */
00064   if (flags == 0) {
00065 
00066     /*
00067      * This is temp i think its still an issue clearVirtualPage(pageAddr);
00068      * freePage((uInt32)(pageTable[pageTableIndex] & 0xFFFFF000));
00069      */
00070   }
00071   /* Unmap The Page */
00072   pageTable[pageTableIndex] = 0x0;
00073   /* Rehash The Page Directory */
00074   asm volatile(
00075       "movl %cr3,%eax\n"
00076       "movl %eax,%cr3\n"
00077     );
00078   /* Return */
00079   return;
00080 }
00081 
00082 
00083 
00084 /************************************************************************
00085 
00086 Function: void vmmUnmapPages(uInt32 pageAddr,int flags);
00087 Description: This Function Will Unmap A Page From The Kernel VM Space
00088              The Flags Variable Decides If Its To Free The Page Or Not
00089              A Flag Of 0 Will Free It And A Flag Of 1 Will Keep It
00090 Notes:
00091 
00092 07/30/02 - I Have Decided That This Should Free The Physical Page There
00093            Is No Reason To Keep It Marked As Not Available
00094 
00095 07/30/02 - Ok A Found A Reason To Keep It Marked As Available I Admit
00096            Even I Am Not Perfect Ok The Case Where You Wouldn't Want To
00097            Free It Would Be On Something Like Where I Allocated A Page
00098            To Create A New Virtual Space So Now It Has A Flag
00099 
00100 ************************************************************************/
00101 void vmmUnmapPages(void *ptr,uInt32 size) {
00102   uInt32 baseAddr = (uInt32)ptr & 0xFFFFF000;
00103   uInt32 dI = 0x0,tI = 0x0;
00104   uInt32 y = 0x0;
00105   uInt32 *pageTable = 0x0;
00106 
00107   dI = (baseAddr/(1024*4096));
00108   tI = ((baseAddr-(dI*(1024*4096)))/4096);
00109   pageTable = (uInt32 *)(tablesBaseAddress + (4096*dI));
00110   for (y=tI;y<(tI+((size+4095)/4096));y++) {
00111     pageTable[y] = 0x0;
00112     }
00113   return;
00114   }
00115 
00116 /***
00117  $Log: unmappage_8c-source.html,v $
00117  Revision 1.7  2006/12/15 17:47:08  reddawg
00117  Updates
00117 
00118  Revision 1.1.1.1  2006/06/01 12:46:13  reddawg
00119  ubix2
00120 
00121  Revision 1.2  2005/10/12 00:13:38  reddawg
00122  Removed
00123 
00124  Revision 1.1.1.1  2005/09/26 17:24:54  reddawg
00125  no message
00126 
00127  Revision 1.4  2004/07/26 19:15:49  reddawg
00128  test code, fixes and the like
00129 
00130  Revision 1.3  2004/06/15 12:35:05  reddawg
00131  Cleaned Up
00132 
00133  Revision 1.2  2004/06/10 22:23:56  reddawg
00134  Volatiles
00135 
00136  Revision 1.1.1.1  2004/04/15 12:06:53  reddawg
00137  UbixOS v1.0
00138 
00139  Revision 1.7  2004/04/13 16:36:34  reddawg
00140  Changed our copyright, it is all now under a BSD-Style license
00141 
00142  END
00143  ***/

Generated on Fri Dec 15 11:18:55 2006 for UbixOS V2 by  doxygen 1.4.7