Wake from sleep (Software Serial vice Serial)

Hi.
Would like ask You for advice.
I'm using atmega328p like (UNO). For saving batteries need sleep mode.
Periodically need to check user keyboard input from terminal-> FTDI-> Serial
At this moment I'm using SoftwareSerial for this and IT WORK perfect, ANY CHARACTER WAKE UP device from sleep.
To make some optimization I need to move this function to hardware serial pins (0,1) Software pins will work with GSM module.
My problem: device don't wake up from sleep from characters in hardware serial (and yes I read article about Sleep on Arduino manual. Author say that ONLY way to wake up is interrupts.....but with SoftwareSerial it works!!!)
Will appreciate any ideas.

Thanks,
Igor

it's part of my code....please don't pay attention for missing some functions...

#include <SoftwareSerial.h>

SoftwareSerial debugSerial = SoftwareSerial(MODEBUGRXPIN, MODEBUGTXPIN);

void setup() {
debugSerial.begin(9600);

  setup_watchdog(9); // 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms,6=1sec,7=2sec,8=4 ec,9=8sec 
   ADCSRA &= ~(1<<ADEN);     // MC ADC OFF  
   set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
};
void loop(){
  wake_status=hive.system_sleep(8);
  
  if (wake_status == 1) hive.overnight_report(true);  //1 - weke up from Int_0 
  if (wake_status == 2) hive.report_alarm(1);               //2 - weke up from  Int_1 
  if (wake_status == 4) hive.system_monitor();          //4 - weke up from  Keyb  
}

//========================= sleep_functions ============================================
void setup_watchdog(byte ii) { // 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms,6=1sec,7=2sec,8=4 ec,9=8sec 
  byte bb;
  bb=ii & 7;
  if (ii > 7) bb|= (1<<5);
  bb|= (1<<WDCE);
 
  MCUSR &= ~(1<<WDRF);
  WDTCSR |= (1<<WDCE) | (1<<WDE);// start timed sequence
  WDTCSR = bb;       // set new watchdog timeout value
  WDTCSR |= _BV(WDIE);
}

ISR(WDT_vect){        // is executed when  watchdog timed out
  f_wdt=1;  
}
void int_0r(){        // is executed when Inn_0
  int_0=1;
};
void int_1r(){        // is executed when Inn_1
  int_1=1;
};
 
//======================== system_sleep =============================================
byte SMARTBHIVE::system_sleep(unsigned int sllep_time){          //sleeptime ??????? 8 ???
#if DEBUGMODE < 5
 Serial.print(millis());Serial.print(F(" Sleep for "));Serial.println(sllep_time);
delay(12);
#endif          
  int_0=0; int_1=0;                    //reset flags
unsigned long ii; 
for (ii=0;ii<sllep_time/8;ii++){
  f_wdt=0;
  sleep_enable();
  attachInterrupt(0, int_0r, RISING);
  attachInterrupt(1, int_1r, RISING);
  wdt_reset();
  sleep_mode();                               // System sleeps here
  sleep_disable();                            // System continues execution here when watchdog timed out  or int
  detachInterrupt(0);  
  detachInterrupt(1);
  if (f_wdt==0) break;                             // wake not from wdt
};
    unsigned long reading1;           // recover time from sleep
    unsigned long reading2;
        while (true) {
          reading1 =timer0_millis;
          reading2 =timer0_millis;
          if (reading1 == reading2){
            timer0_millis = 8100*ii + reading1;   
            break;
          } 
       }
 
 if (ii== sllep_time/8){  
   #if DEBUGMODE < 5
     Serial.print(millis());Serial.println(F(" Wake WDT"));
   #endif       
  return(3);           //3 - exit on wdt 
 };   
 if (int_0==1) {
    #if DEBUGMODE < 5
      Serial.print(millis());Serial.println(F(" Wake Int_0"));
    #endif        
    return(1);          //1 - ????? ?? Int_0    
 };
 if (int_1==1) {
  #if DEBUGMODE < 5
    Serial.print(millis());Serial.println(F(" Wake Int_1"));
  #endif       
  return(2);           //2 - ????? ?? Int_1    
 };
#if DEBUGMODE < 5
    Serial.print(millis());Serial.println(F(" Wake Keyb"));
  #endif 
 return(4);         //4 - ????? ?? Keyb
};

Author say that ONLY way to wake up is interrupts.....but with SoftwareSerial it works!!!)

Because SoftwareSerial uses pin change interrupts. Hardware serial uses interrupts, too. But, those interrupts don't trigger waking up. Connect a jumper from the RX pin to pin 2; the arrival of serial data will trigger an interrupt on that pin; you can attach an ISR to that pin to make the Arduino wake up.

Thanks for reply.
Is it theoretically possible (for SoftwareSerial) use pin interrupts on pins like A3 A4 (wich I use for softwareserial) ?

If you look on my code function sleep() there are 4 exit code... for wdt, int0, int1, and keyboard. (and it work fine)
If any interrupt happen during sleep (wdt, int0, int1) it turn on corresponding flag.
If system wake up and all flags =0 - this mean it wake up from softwareserial.

I know about sending TX to int but all int pins used for other critical function.
Probably somebody know how to enable wake up for serial.

Thanks,
Igor