ubixfs.h

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: ubixfs_8h-source.html 88 2016-01-12 00:11:29Z reddawg $
00027 
00028 *****************************************************************************************/
00029 
00030 #ifndef _UBIXFS_H
00031 #define _UBIXFS_H
00032 
00033 #include <ubixos/types.h>
00034 #include <vfs/vfs.h>
00035 #include <sys/device.h>
00036 #include <mpi/mpi.h>
00037 #include <ubixfs/dirCache.h>
00038 
00039 
00040 #define UBIXFS_BLOCKSIZE_BYTES     blockSize*512
00041 #define UBIXFS_ALIGN(size) (size + ((((size) % (UBIXFS_BLOCKSIZE_BYTES)) == 0)? 0 : ((UBIXFS_BLOCKSIZE_BYTES) - ((size) % (UBIXFS_BLOCKSIZE_BYTES)))))
00042 
00043 #define UBIXDISKMAGIC     ((uInt32)0x45) /* The disk magic number */
00044 #define MAXUBIXPARTITIONS 16
00045 #define blockSize         8
00046 
00047 
00048 #define EOBC              -1
00049 
00050 
00051 #define typeFile      1
00052 #define typeContainer 2
00053 #define typeDirectory 4
00054 #define typeDeleted   8
00055 
00056 /* Start */
00057 struct directoryList {
00058   char                  dirName[256];
00059   char                 *dirCache;
00060   uInt32                dirBlock;
00061   struct directoryList *next;
00062   struct directoryList *prev;
00063   };
00064 
00065 typedef struct directoryList * dirList_t;
00066 
00067 dirList_t ubixFSLoadDir(char *);
00068 /* End   */
00069 
00070 //Partition Information
00071 struct ubixDiskLabel {
00072   uInt32 magicNum;
00073   uInt32 magicNum2;
00074   uInt16 driveType;
00075   uInt16 numPartitions;
00076   struct  ubixPartitions {  //the partition table
00077     uInt32 pSize;            //number of sectors in partition
00078     uInt32 pOffset;          //starting sector
00079     uInt32 pFsSize;          //filesystem basic fragment size
00080     uInt32 pBatSize;         //BAT size
00081     uInt8 pFsType;          //filesystem type, see below
00082     uInt8 pFrag;            //filesystem fragments per block
00083     } partitions[MAXUBIXPARTITIONS];
00084   };
00085 
00086 
00087 struct partitionInformation {
00088   uInt32 size;                 //Size In Sectors
00089   uInt32 startSector;          //Base Sector Of Partition
00090   uInt32 blockAllocationTable; //Base Sector Of BAT
00091   uInt32 rootDirectory;        //Base Sector Of Root Directory
00092   };
00093 
00094 //Block Allocation Table Entry
00095 struct blockAllocationTableEntry {
00096   long attributes; //Block Attributes
00097   long realSector; //Real Sector  
00098   long nextBlock;  //Sector Of Next Block
00099   long reserved;   //Reserved
00100   };
00101 
00102 //UbixFS Directory Entry
00103 struct directoryEntry {
00104   uInt32  startCluster;   //Starting Cluster Of File
00105   uInt32  size;           //Size Of File
00106   uInt32  creationDate;  //Date Created
00107   uInt32  lastModified;  //Date Last Modified
00108   uInt32  uid;           //UID Of Owner
00109   uInt32  gid;           //GID Of Owner
00110   uInt16 attributes;    //Files Attributes
00111   uInt16 permissions;   //Files Permissions
00112   char   fileName[256]; //File Name
00113   };
00114 
00115 struct bootSect {
00116   uInt8 jmp[4];
00117   uInt8 id[6];
00118   uInt16 version;
00119   uInt16 tmp;
00120   uInt16 fsStart;
00121   uInt16 tmp2;
00122   uInt32 krnl_start;
00123   uInt BytesPerSector;
00124   uInt SectersPerTrack;
00125   uInt TotalHeads;
00126   uInt32 TotalSectors;
00127   uInt8 code[479];
00128   };  
00129 
00130 struct ubixFSInfo {
00131   struct blockAllocationTableEntry *blockAllocationTable;
00132   struct cacheNode * dirCache;
00133   uInt32 batEntries;
00134   uInt32 rootDir;
00135 }; /* ubixFSInfo */
00136 
00137 int readFile(char *file);
00138 int writeFileByte(int ch,fileDescriptor *fd,long offset);
00139 //int openFileUbixFS(char *file,fileDescriptor *fd);
00140 int getFreeBlocks(int count,fileDescriptor *fd);
00141 //extern struct ubixDiskLabel *diskLabel;
00142 
00143 //Good Functions
00144 //void initUbixFS(struct mountPoints *mp);
00145 
00146 int readUbixFS(fileDescriptor *fd,char *data,uInt32,long size);
00147 int writeUbixFS(fileDescriptor *fd,char *data,long offset,long size);
00148 void syncBat(struct vfs_mountPoint *mp);
00149 int freeBlocks(int block,fileDescriptor *fd);
00150 int addDirEntry(struct directoryEntry *dir,fileDescriptor *fd);
00151 void ubixFSUnlink(char *path,struct vfs_mountPoint *mp);
00152 int ubixFSmkDir(char *dir,fileDescriptor *fd);
00153 
00154 int  ubixfs_init();
00155 int  ubixfs_initialize();
00156 void ubixfs_thread();
00157 
00158 
00159 #endif
00160 
00161 /***
00162  $Log: ubixfs_8h-source.html,v $
00162  Revision 1.2  2006/12/15 17:47:08  reddawg
00162  Updates
00162 
00163  Revision 1.2  2006/12/05 14:10:21  reddawg
00164  Workign Distro
00165 
00166  Revision 1.1.1.1  2006/06/01 12:46:14  reddawg
00167  ubix2
00168 
00169  Revision 1.2  2005/10/12 00:13:37  reddawg
00170  Removed
00171 
00172  Revision 1.1.1.1  2005/09/26 17:23:53  reddawg
00173  no message
00174 
00175  Revision 1.21  2004/09/14 20:57:01  reddawg
00176  Bug fixes: macro problem over opt a multiply
00177 
00178  Revision 1.20  2004/08/01 17:58:39  flameshadow
00179  chg: fixed string allocation bug in ubixfs_cacheNew()
00180 
00181  Revision 1.19  2004/07/27 12:02:01  reddawg
00182  chg: fixed marks bug readFile did a lookup which is why it looked like it was loopping so much
00183 
00184  Revision 1.18  2004/07/23 09:10:06  reddawg
00185  ubixfs: cleaned up some functions played with the caching a bit
00186  vfs:    renamed a bunch of functions
00187  cleaned up a few misc bugs
00188 
00189  Revision 1.17  2004/07/22 22:37:03  reddawg
00190  Caching is working now the FS is extremely fast but needs to be optimized to do 32bit copies over 8bit
00191 
00192  Revision 1.16  2004/07/20 21:28:16  flameshadow
00193  oops
00194 
00195  Revision 1.14  2004/07/20 19:36:49  reddawg
00196  UBU Tags
00197 
00198  Revision 1.13  2004/07/14 12:21:49  reddawg
00199  ubixfs: enableUbixFs to ubixfs_init
00200  Changed Startup Routines
00201 
00202  END
00203  ***/

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