mirror of https://github.com/FDOS/kernel.git
Buffer config fixes from Arkady.
git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@863 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
parent
6ad8b415dd
commit
ca11edc6fd
|
@ -908,12 +908,8 @@ STATIC void Config_Buffers(BYTE * pLine)
|
||||||
COUNT nBuffers;
|
COUNT nBuffers;
|
||||||
|
|
||||||
/* Get the argument */
|
/* Get the argument */
|
||||||
if (GetNumArg(pLine, &nBuffers) == (BYTE *) 0)
|
if (GetNumArg(pLine, &nBuffers))
|
||||||
return;
|
Config.cfgBuffers = nBuffers;
|
||||||
|
|
||||||
/* Got the value, assign either default or new value */
|
|
||||||
Config.cfgBuffers =
|
|
||||||
(nBuffers < 0 ? nBuffers : max(Config.cfgBuffers, nBuffers));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1697,43 +1693,45 @@ STATIC COUNT strcasecmp(REG BYTE * d, REG BYTE * s)
|
||||||
that saves some relocation problems
|
that saves some relocation problems
|
||||||
*/
|
*/
|
||||||
|
|
||||||
STATIC void config_init_buffers(int anzBuffers)
|
STATIC void config_init_buffers(int wantedbuffers)
|
||||||
{
|
{
|
||||||
REG WORD i;
|
|
||||||
struct buffer FAR *pbuffer;
|
struct buffer FAR *pbuffer;
|
||||||
unsigned wantedbuffers = anzBuffers;
|
unsigned buffers = 0;
|
||||||
|
|
||||||
if (anzBuffers < 0)
|
/* fill HMA with buffers if BUFFERS count >=0 and DOS in HMA */
|
||||||
{
|
if (wantedbuffers < 0)
|
||||||
wantedbuffers = anzBuffers = -anzBuffers;
|
wantedbuffers = -wantedbuffers;
|
||||||
}
|
|
||||||
else if (HMAState == HMA_DONE)
|
else if (HMAState == HMA_DONE)
|
||||||
{
|
buffers = (0xfff0 - HMAFree) / sizeof(struct buffer);
|
||||||
anzBuffers = (0xfff0 - HMAFree) / sizeof(struct buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
anzBuffers = max(anzBuffers, 6);
|
if (wantedbuffers < 6) /* min 6 buffers */
|
||||||
if (anzBuffers > 99)
|
wantedbuffers = 6;
|
||||||
|
if (wantedbuffers > 99) /* max 99 buffers */
|
||||||
{
|
{
|
||||||
printf("BUFFERS=%u not supported, reducing to 99\n", anzBuffers);
|
printf("BUFFERS=%u not supported, reducing to 99\n", wantedbuffers);
|
||||||
anzBuffers = 99;
|
wantedbuffers = 99;
|
||||||
}
|
}
|
||||||
LoL->nbuffers = anzBuffers;
|
if (wantedbuffers > buffers) /* more specified than available -> get em */
|
||||||
|
buffers = wantedbuffers;
|
||||||
|
|
||||||
|
LoL->nbuffers = buffers;
|
||||||
LoL->inforecptr = &LoL->firstbuf;
|
LoL->inforecptr = &LoL->firstbuf;
|
||||||
|
|
||||||
{
|
{
|
||||||
size_t bytes = sizeof(struct buffer) * anzBuffers;
|
size_t bytes = sizeof(struct buffer) * buffers;
|
||||||
pbuffer = HMAalloc(bytes);
|
pbuffer = HMAalloc(bytes);
|
||||||
|
|
||||||
if (pbuffer == NULL)
|
if (pbuffer == NULL)
|
||||||
{
|
{
|
||||||
pbuffer = KernelAlloc(bytes, 'B', 0);
|
pbuffer = KernelAlloc(bytes, 'B', 0);
|
||||||
|
if (HMAState == HMA_DONE)
|
||||||
|
firstAvailableBuf = MK_FP(0xffff, HMAFree);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LoL->bufloc = LOC_HMA;
|
LoL->bufloc = LOC_HMA;
|
||||||
LoL->deblock_buf = KernelAlloc(SEC_SIZE, 'B', 0);
|
LoL->deblock_buf = KernelAlloc(SEC_SIZE, 'B', 0);
|
||||||
|
/* space in HMA beyond requested buffers available as user space */
|
||||||
|
firstAvailableBuf = pbuffer + wantedbuffers;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1742,18 +1740,19 @@ STATIC void config_init_buffers(int anzBuffers)
|
||||||
DebugPrintf(("init_buffers (size %u) at", sizeof(struct buffer)));
|
DebugPrintf(("init_buffers (size %u) at", sizeof(struct buffer)));
|
||||||
DebugPrintf((" (%p)", LoL->firstbuf));
|
DebugPrintf((" (%p)", LoL->firstbuf));
|
||||||
|
|
||||||
pbuffer->b_prev = FP_OFF(pbuffer + (anzBuffers-1));
|
buffers--;
|
||||||
for (i = 1; i < anzBuffers; ++i)
|
pbuffer->b_prev = FP_OFF(pbuffer + buffers);
|
||||||
{
|
{
|
||||||
if (i == wantedbuffers)
|
int i = buffers;
|
||||||
|
do
|
||||||
{
|
{
|
||||||
firstAvailableBuf = pbuffer;
|
pbuffer->b_next = FP_OFF(pbuffer + 1);
|
||||||
}
|
pbuffer++;
|
||||||
pbuffer->b_next = FP_OFF(pbuffer + 1);
|
pbuffer->b_prev = FP_OFF(pbuffer - 1);
|
||||||
pbuffer++;
|
}
|
||||||
pbuffer->b_prev = FP_OFF(pbuffer - 1);
|
while (--i);
|
||||||
}
|
}
|
||||||
pbuffer->b_next = FP_OFF(pbuffer - (anzBuffers-1));
|
pbuffer->b_next = FP_OFF(pbuffer - buffers);
|
||||||
|
|
||||||
/* now, we can have quite some buffers in HMA
|
/* now, we can have quite some buffers in HMA
|
||||||
-- up to 50 for KE38616.
|
-- up to 50 for KE38616.
|
||||||
|
@ -1764,8 +1763,11 @@ STATIC void config_init_buffers(int anzBuffers)
|
||||||
DebugPrintf((" done\n"));
|
DebugPrintf((" done\n"));
|
||||||
|
|
||||||
if (FP_SEG(pbuffer) == 0xffff)
|
if (FP_SEG(pbuffer) == 0xffff)
|
||||||
|
{
|
||||||
|
buffers++;
|
||||||
printf("Kernel: allocated %d Diskbuffers = %u Bytes in HMA\n",
|
printf("Kernel: allocated %d Diskbuffers = %u Bytes in HMA\n",
|
||||||
anzBuffers, anzBuffers * sizeof(struct buffer));
|
buffers, buffers * sizeof(struct buffer));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC void config_init_fnodes(int f_nodes_cnt)
|
STATIC void config_init_fnodes(int f_nodes_cnt)
|
||||||
|
|
Loading…
Reference in New Issue