/* Fichero de cabecera de  prototipos de funciones 		  	    */
/*		 Subsistema de Disco 				            */
/*		Version 2.0, marzo 1997                                     */
/*									    */
/* Conjunto minimo de funciones que deben contemplarse en la implementacion */
/* (I) Funcion de interface con el subsistema Cache			    */
/* (O) Funcion interna del Subsistema de Disco				    */

#include "Tipos_DISCO.h"

/* Funcion para crear un fichero de simulacion de disco (O) */
int Inicializa_Disco( char *nombre, bloq_param parametros );
	/* nombre: apunta a cadena de caracteres que coniene el nombre */
	/* parametros: caracteristicas del disco a simular */
	/* retorna: 0 ejecucion sin error, -1 error */

/* Funcion para activar una unidad de disco (O) */
int Monta_Disco( char *nombre );
	/* nombre: apunta a cadena de caracteres que contiene el nombre */
	/* retorna: numero de unidad (>=0) ejecucion sin error, -1 error */

/* Funcion para desactivar una unidad de disco  (O) */
int Desmonta_Disco( unidad fd );
	/* fd: numero de unidad obtenido mediante Monta_Disco */
	/* retorna: 0 ejecucion correcta, -1 error */

/* Funciona para posicionar el brazo en un cilindro (O) */
int Posiciona_Cabeza( unidad fd, unsigned short int cil);
	/* fd: numero de unidad valido */
	/* cil: numero de cilindro valido */
	/* retorna: 0 ejecucion correcta, -1 error */

/* Funcion para leer la posicion actual (cilindro) del brazo del disco (O) */ 
int Lee_Posicion( unidad fd);
	/* fd: numero de unidad valido */
	/* retorna: cilindro ejecucion correcta, -1 error */

/* Funcion para llevar a cabo un recalibrado de una unidad de disco (O) */
int Recalibra_Disco( unidad fd );
	/* ud: numero de unidad valida */
	/* retorna: 0 ejecucion correcta, -1 error */

/* Funcion que calcula la direccion fisica de un sector logico (O) */
int Direccion_Fisica( unidad fd, sector_logico sect,  dir_fis *dir);
	/* fd: unidad de disco valida */
	/* sect: numero de sector logico */
	/* dir: apunta a estructura que contendra la direccion calculada */
	/* retorna: 0 ejecucion sin error, -1 error */

/* Funcion para trasnferir un sector fisico (O) */
int Transferencia_Fisica( unidad fd, dir_fis dir, void *buff, int modo);
	/* fd: unidad de disco valida */
	/* dir: direccion fisica del sector a transferir */
	/* buff: direccion al buffer en memoria de la transferencia */
	/* modo: tipo de transferencia (LECTURA o ESCRITURA */ 
	/* retorno: 0 transferencia ejecutada con exito, -1 error */

/* Funcion para transferir un sector logico (I) */
int Transfiere_Sector( unidad fd, sector_logico *sect, void *buff, int modo);
	/* fd: unidad de disco valida */
	/* sect: direccion de un vector de sectores logicos a transferir */
	/* buff: direccion al buffer en memoria de la transferencia */
	/* modo: tipo de transferencia (LECTURA o ESCRITURA) */
	/* retorno: 0 transferencia realizada con exito, -1 error */


/* Funcion de visualizacion del estado del sistema de disco (I)*/
int Informe_Disco( void );